Преобразовать символ в строку в JavaScript?
есть .toString() on Symbol в ES6, который возвращает строковое представление Symbol, но интересно, почему '' + Symbol() не работает (запустить это выражение выбрасывает TypeError которого я не ожидаю)? Второе звоню .toString() на новый Symbol и append (+) это пустая строка?
2 ответов
последний просто звонит
.toString()на новыйSymbolи append (+) это пустая строка?
нет на самом деле символы не могут быть неявно приведены к строкам или числам, хотя интересно, что вы можете неявно привести их к логическому.
MDN на самом деле имеет раздел на некоторых из этих ловушек:
преобразование типов символов
некоторые вещи, чтобы отметить при работе с преобразованием типов символов.
- при попытке преобразовать символ в число, a
TypeErrorбудет брошен (например,+symилиsym | 0).- при использовании свободного равенства,
Object(sym) == symвозвращаетtrue.Symbol("foo") + "bar"бросает!--3--> (не может преобразовать символ в строку). Например, это не позволяет автоматически создавать новое имя строкового свойства из символа.- в "безопаснее"
String(sym)преобразование работает как вызовSymbol.prototype.toString()С символами, но обратите внимание, чтоnew String(sym)бросит.
это поведение задокументировано в спецификации под аннотация ToString операция:
Аргумент Типа: символ
результат: бросить
TypeErrorисключения.
и аналогично для аннотация ToNumber операция:
Аргумент Типа: символ
результат: бросить
TypeErrorисключения.
бросить Symbol к строке без TypeError, вы должны использовать toString метод, или String().
от https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toString.
объект Symbol переопределяет метод toString объекта Object; он не наследует объект.прототип.toString (). Для объектов символов, метод toString возвращает строковое представление объекта.