将JavaScript符号转换为字符串?

时间:2016-12-03 05:11:58

标签: javascript ecmascript-6 symbols

ES6中.toString()上有一个Symbol,它返回Symbol的字符串表示形式,但想知道为什么'' + Symbol()无效(运行此表达式抛出)我不期待的那个TypeError?后者只是在新.toString()上调用Symbol并将其追加(+)为空字符串吗?

2 个答案:

答案 0 :(得分:13)

  

后者只是在新.toString()上调用Symbol并将其附加(+)为空字符串吗?

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

MDN actually has a section关于其中一些陷阱:

  

符号类型转换

     

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

     
      
  • 尝试将符号转换为数字时,系统会引发TypeError(例如+symsym | 0)。
  •   
  • 使用宽松的平等时,Object(sym) == sym会返回true.
  •   
  • Symbol("foo") + "bar"抛出TypeError(无法将符号转换为字符串)。这可以防止您从符号中静默创建新的字符串属性名称,例如。
  •   
  • “更安全”的String(sym)转换就像使用符号调用Symbol.prototype.toString()一样,但请注意new String(sym)将会抛出。
  •   

此行为记录在abstract ToString operation

下的规范中
  

参数类型:符号

     

结果:抛出TypeError例外。

同样适用于abstract ToNumber operation

  

参数类型:符号

     

结果:抛出TypeError例外。

要将Symbol投射到没有TypeError的字符串,您必须使用toString方法或String()

答案 1 :(得分:1)

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toString

  

Symbol对象覆盖Object对象的toString方法;   它不继承Object.prototype.toString()。对于Symbol对象,   toString方法返回对象的字符串表示。