将JavaScript符号转换为字符串?

Tho*_*son 9 javascript symbols ecmascript-6

有一个.toString()关于Symbol在ES6返回的字符串表示Symbol,但不知道为什么'' + Symbol()不工作(运行这个表达式抛出TypeError,我不指望)?后者只是调用.toString()new Symbol并将+它追加()它为空字符串吗?

Ale*_*ara 13

后者只是调用.toString()new Symbol并将+它追加()它为空字符串吗?

实际上,Symbols不能隐式地转换为字符串或数字,尽管有趣的是你可以隐式地将它们转换为布尔值.

MDN实际上有一个关于其中一些陷阱的部分:

符号类型转换

使用符号类型转换时需要注意的一些事项.

  • 当尝试将符号转换为数字时,TypeError将抛出a(例如+symsym | 0).
  • 使用松散相等时,Object(sym) == sym返回true.
  • Symbol("foo") + "bar"抛出一个TypeError(不能将符号转换为字符串).例如,这可以防止您从符号静默创建新的字符串属性名称.
  • "更安全"的String(sym)转换就像调用Symbol.prototype.toString()符号一样,但注意new String(sym)会抛出.

此行为记录在抽象ToString操作下的规范中:

参数类型:符号

结果:抛出TypeError异常.

同样对于抽象ToNumber操作:

参数类型:符号

结果:抛出TypeError异常.

要将a Symbol转换为不带a的字符串TypeError,必须使用toString方法或String().