为什么Symbol('test').toString()
效果很好,但我无法使用'' + Symbol('test')
?
它将抛出错误:
无法将Symbol值转换为字符串
为什么隐式类型转换不起作用?为什么代码不等于'' + Symbol('test').toString()
?
答案 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
。