为什么符号不隐式转换字符串

新手上路,请多包涵

为什么 Symbol('test').toString() 工作正常,但我不能使用 '' + Symbol('test')

它会抛出错误:

无法将 Symbol 值转换为字符串

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

原文由 SkyAo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 320
2 个回答

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

所以调用内部 ToString 与调用 Symbol.prototype.toString 不同。

所以我猜答案是:

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

是“ _因为规范是这样说的_”。

原文由 RobG 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以,但是你并不是偶然这样做的。

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

console.log(Symbol('My symbol!').description)
// 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

您还可以使用 .description 获取用于创建符号的字符串值。

原文由 John Leidegren 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题