Почему символы не преобразуют строки неявно

Почему Symbol('test').toString() работает хорошо, но я не могу использовать '' + Symbol('test')?

Это вызовет ошибку:

не может преобразовать значение Symbol в строку

Почему неявное преобразование типов не работает? Почему код не равен '' + Symbol('test').toString()?

Ответ 1

Согласно ECMA-262, использование оператора сложения по значению типа Symbol в сочетании со строковым значением сначала вызывает внутренний ToPrimitive, который возвращает символ. Затем он вызывает внутреннюю ToString, которая для символов будет вызывать исключение TypeError.

Поэтому вызов внутренней ToString не совпадает с вызовом Symbol.prototype.toString.

Поэтому я думаю, что ответ на:

Почему неявное преобразование типов не работает?

"потому что спецификация говорит так".

Ответ 3

Вы можете просто не делать это случайно.

console.log(''+String(Symbol('My symbol!')))
// Symbol(My other symbol!)

console.log(Symbol.keyFor(Symbol.for('My other symbol!')))
// My other symbol!    

Примечание: Symbol.keyFor работает только для символов, созданных с помощью функции Symbol.for.

Symbol.keyFor(Symbol('My symbol!')) will evaluate to undefined.