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