Предположим, у нас есть объект:
var pet = {
"name": "Barky",
"species" : "dog",
"foods": {
"likes": ["bones", "carrots"],
"dislikes": ["tuna"]
}
};
console.info(pet.foods.likes); //returns [ 'bones', 'carrots' ]
console.info(`${pet.foods.likes}`) //returns "bones,carrots"
Если я использую строку шаблона, она отображается как обычная строка, почему?
Потому что ты строишь строку? Почему вы ожидаете, что строка шаблона будет отображаться как нечто другое?
@Bergi, здесь тип данных лайков - это массив. Это не строка.
@iamPavan likes может быть массивом, но тип данных результата литеральной оценки шаблона — строка. Не заключайте массив в строку, если хотите сохранить его как массив.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Внутри литерала шаблона выражение внутри неявно приводится к строке (поскольку литералы шаблона всегда оцениваются как строки). Таким образом, массив получает .joinзапятые как часть процесса интерполяции и становится строкой (без []s и без строковых разделителей между элементами).
console.info(`${pet.foods.likes}`) //returns bones,carrots
эквивалентно
console.info(pet.foods.likes.join(','))
или
console.info(pet.foods.likes.toString())
Напротив, простой pet.foods.likes представляет собой массив, поэтому он регистрируется как массив с разделителями массивов.
... или каким-либо образом консоль хочет зарегистрировать это.
Поскольку вы получаете строковую интерпретацию массива.