Как хранятся и копируются значения типа symbol?

const a = Symbol(), b = a
console.log(a === b) // true (values ​​of type symbol are equal only to themselves)

Символы хранятся и копируются по значению или по ссылке?
Как происходит сравнение символов с символами?
Как это описано в стандарте ECMAScript?

Если символ копируется по значению, как и другие примитивы, то теряется его «уникальность» и меняется алгоритм сравнения.
Самостоятельно проверить как с объектами не удалось, так как символ это неизменяемый примитив.
  • Вопрос задан
  • 196 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Я подозреваю, что это никак не прописано в спецификации, и остается на усмотрение разработчиков js-движка. Вот строки - тоже примитивы. В ряде случаев передаются по ссылке, а в других случаях - по значению. Причем это поведение частично изменялось в хроме лет 6-8 назад, но практически для всех это прошло незаметно.

Если у вас есть старый хром, попробуйте в нем запустить вот эти примеры и сравните с современным поведением https://www.htmlgoodies.com/html5/javascript/passi...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Seasle
@Seasle Куратор тега JavaScript
\( ゚ヮ゚)/
Спецификация гласит, что Symbol является примитивом (примитивным значением), следовательно копируется значение - а именно результат Symbol([Description]). Если Вы создадите два символа с одинаковым значением - они буду уникальны. Исключением является Symbol.for([Description]). По спецификации, если ранее не существовал Symbol с требуемым описанием, то он будет создан; иначе возвращен прошлый экземпляр символа.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы