为什么无法将Symbol值转换为字符串

时间:2017-06-08 03:06:54

标签: javascript

为什么Symbol('test').toString()效果很好,但我无法使用'' + Symbol('test')

它将抛出错误:

  

无法将Symbol值转换为字符串

为什么隐式类型转换不起作用?为什么代码不等于'' + Symbol('test').toString()

3 个答案:

答案 0 :(得分:18)

根据ECMA-262,使用类型为Symbol的值的addition operator结合字符串值,首先调用内部ToPrimitive,它返回符号。然后它调用内部ToString,对于Symbols,它将抛出TypeError异常。

因此调用内部 ToString 与调用Symbol.prototype.toString不同。

所以我想答案是:

  

为什么隐式类型转换不起作用?

是" 因为规范是这样说的"。

答案 1 :(得分:0)

你的类型不是字符串

'' + Symbol('test').toString()

你可以检查,符号是ES6中的新类型

https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Symbol

The Symbol() function returns a value of type symbol, .....

答案 2 :(得分:0)

您可以,只是不想无意中这么做。

console.log(''+String(Symbol('My symbol!')))
// Symbol(My other symbol!)

console.log(Symbol.keyFor(Symbol.for('My other symbol!')))
// My other symbol!    
  

注意: Symbol.keyFor仅适用于通过Symbol.for函数创建的符号。

     

Symbol.keyFor(Symbol('My symbol!'))将得出undefined