Symbol() + ''抛出
TypeError:无法将符号值转换为字符串
而已知的解决办法是使用String(Symbol())。
这看起来与其他原语不一致,包括那些几乎不应该被胁迫的原语(undefined和null)。
String和+ ''到底有什么区别(除了它的工作能力)?规范是否明确指定String应该接受符号?以一种方式允许它而在另一种方式中不允许它的动机是什么?
发布于 2017-07-27 15:37:22
字符串与+ '‘到底有什么不同(除非它能工作)?规范是否明确指定字符串应该接受符号?
它们的不同之处在于,String()有Symbol()的情况,而+操作符(用于连接时)直接调用ToString()操作,该操作为Symbol()抛出TypeError异常。
来自String()规范:
如果NewTarget未定义,类型(值)为符号,则返回SymbolDescriptiveString(值)。
来自+评估规范:
如果Type(lprim)是字符串,类型(Rprim)是字符串,那么
注意:lprim和rprim的定义来自于评估过程中的前10个步骤,这些步骤涉及到获取表达式两侧的原始类型和值。我不是为了让这个职位更短才把他们包括在内的。我已经链接了我在下面引用的每一个规范。
从ToString()输出:
符号:抛出TypeError异常。
至于你的最后一个问题:
以一种方式允许它而在另一种方式中不允许它的动机是什么?
这对ECMA国际的作者来说是件好事。
字符串() ES6规范
+运算符运行时评估ES6规范
ToString()输出行为ES6规范
https://stackoverflow.com/questions/45354760
复制相似问题