Преобразовать символ в строку в 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 возвращает строковое представление объекта.