首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >符号串强制

符号串强制
EN

Stack Overflow用户
提问于 2017-07-27 15:13:06
回答 1查看 176关注 0票数 2

Symbol() + ''抛出

TypeError:无法将符号值转换为字符串

而已知的解决办法是使用String(Symbol())

这看起来与其他原语不一致,包括那些几乎不应该被胁迫的原语(undefinednull)。

String+ ''到底有什么区别(除了它的工作能力)?规范是否明确指定String应该接受符号?以一种方式允许它而在另一种方式中不允许它的动机是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-27 15:37:22

字符串与+ '‘到底有什么不同(除非它能工作)?规范是否明确指定字符串应该接受符号?

它们的不同之处在于,String()Symbol()的情况,而+操作符(用于连接时)直接调用ToString()操作,该操作为Symbol()抛出TypeError异常。

来自String()规范:

如果NewTarget未定义,类型(值)为符号,则返回SymbolDescriptiveString(值)。

来自+评估规范:

如果Type(lprim)是字符串,类型(Rprim)是字符串,那么

  • 让lstr是ToString(lprim)。
    • ReturnIfAbrupt(lstr.)
    • 让rstr是ToString(rprim)。
    • ReturnIfAbrupt(rstr.)
    • 返回连接lstr和rstr的结果的字符串。

注意:lprimrprim的定义来自于评估过程中的前10个步骤,这些步骤涉及到获取表达式两侧的原始类型和值。我不是为了让这个职位更短才把他们包括在内的。我已经链接了我在下面引用的每一个规范。

ToString()输出:

符号:抛出TypeError异常。

至于你的最后一个问题:

以一种方式允许它而在另一种方式中不允许它的动机是什么?

这对ECMA国际的作者来说是件好事。

字符串() ES6规范

+运算符运行时评估ES6规范

ToString()输出行为ES6规范

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45354760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档