Почему символы не преобразуют строки неявно
Почему Symbol('test').toString()
работает хорошо, но я не могу использовать '' + Symbol('test')
?
Это вызовет ошибку:
не может преобразовать значение Symbol в строку
Почему неявное преобразование типов не работает? Почему код не равен '' + Symbol('test').toString()
?
Ответы
Ответ 1
Согласно ECMA-262, использование оператора сложения по значению типа Symbol в сочетании со строковым значением сначала вызывает внутренний ToPrimitive, который возвращает символ. Затем он вызывает внутреннюю ToString, которая для символов будет вызывать исключение TypeError.
Поэтому вызов внутренней ToString не совпадает с вызовом Symbol.prototype.toString.
Поэтому я думаю, что ответ на:
Почему неявное преобразование типов не работает?
"потому что спецификация говорит так".
Ответ 2
ваш тип не строка
'' + Symbol('test').toString()
вы можете проверить, Symbol - новый тип в ES6
https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Symbol
The Symbol() function returns a value of type symbol, .....
Ответ 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
.