TGViewer
As For JS As For JS @asforjavascript · 3.07K subscribers
Post #912 2.25K
Пояснения относительно задачи про Symbol.

Короткий ответ:
console.log - это внешнее API, которое не обязано подчинятся спецификации ECMA.
Описание того, как и что именно, может делать метод log обьекта console содрежится в спецификации HTML5.

Где прямо написано - решение о том, как поведет себя метод log - лежит на плечах программиста который реализует этот метод. Реализует так - как ему хочется.


Длинный ответ:
Чтобы легко ориентироваться в том, как работает JS - нужно помнить три простых принципа:

1) JS это язык, в котором нет своего ввода/вывода. Любое получение данных или отображение данных, зависит не от языка JS. и может быть каким угодно, в зависимости от того, как работает внешнее API

2) механизм прототипного наследования, которым пронизана вся спецификация (для нашего случая сейчас не принципиален)

3) каждый statement разбирается на выражения, которые выполняются согласно алгоритму заявленному спецификацией.
то есть когда Вы смотрите на строку кода, то в ней НЕТ НИЧЕГО чтобы не прошло через какой то алгоритм.

даже когда вы пишите просто число 1 - то это не данные, это statement который приводит к тому, что возвращается ссылка на что-то что описывает данные.


var theSym = Symbol("abc");
console.log( theSym );

в строке с console.log у нас несколько частей, которые пройдут работу согласно алгоритмам спецификации:
1) console.log - получение ссылки на метод
2) ( ) - callable expression, то есть вызов чего то с чем то
3) идентификатор theSym - получение ссылки на структуру данных связанной с идентификатором theSym

Если кратко - вызов внешнего API log, внешнего обьекта console, передав ему ссылку на то, что связано с идентификатором theSym.

Результат? - в душе не тилельнкаю, потому, что это внешнее API которое может делать чем ему вздумается.


Вторая часть
console.log( `${theSym}` );

отличается от первой тем, что идентификатор theSym проходит через еще один этап вычисления выражения (алгоритма спецификации ECMA). Который требует вызов метода toString применимого к идентификатору, из-за использования темплейт литерал.

Согласно которому, в случае типа Symbol, должно быть throw.


Вместо ИГОГО:
Сталкиваясь с любым поведением, которое вас ставит в тупик, первое что сделайте - разделите где сам язык JS, который регламентируется ECMA Spec, а где вызов внешнего API.

Поведение которого, не обязательно регламентируется той самой ECMA Spec. И может быть как подчинено сторонней спецификации так и быть галлюцинацией программиста, который реализовывал API.

То есть разница в выводе заявленной задачи, оьясняется тем, что метод log обьекта console, а точнее те кто его реализовывал в Google Chrome, сделали так как им удобно. Вопреки тому, что диктует спецификация
  • ❤ 19
  • 🔥 7
  • 👍 2
  • 😍 2
More from @asforjavascript
  1. Oct 10, 2026Два дня назад, в возрасте 90 лет умерла Маргарет Гамильтон. В один из критических моментов…
  2. Oct 9, 2026Какие несоответствия тексту песни, вы видите в клипе? Я нашел пока три. https://www.youtub…
  3. Oct 9, 2026Пусть повисит до утра. Потом удалю https://www.youtube.com/watch?v=qVs4a7K42eE&
  4. Oct 9, 2026Первое видео, где автор пытался седелать его так, чтобы все подумали на ИИ
  5. Oct 9, 2026ErrorHorror снова, пусть и не навсегда, но с нами. Єто особенно приятно констатировать в п…
  6. Oct 9, 2026(c) Деми Мурывович Мяковскый Послушайте! Ведь, если using добавляют - значит - это кому-ни…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →