Tho*_*son 9 javascript symbols ecmascript-6
有一个.toString()关于Symbol在ES6返回的字符串表示Symbol,但不知道为什么'' + Symbol()不工作(运行这个表达式抛出TypeError,我不指望)?后者只是调用.toString()new Symbol并将+它追加()它为空字符串吗?
Ale*_*ara 13
后者只是调用
.toString()newSymbol并将+它追加()它为空字符串吗?
实际上,Symbols不能隐式地转换为字符串或数字,尽管有趣的是你可以隐式地将它们转换为布尔值.
MDN实际上有一个关于其中一些陷阱的部分:
符号类型转换
使用符号类型转换时需要注意的一些事项.
- 当尝试将符号转换为数字时,
TypeError将抛出a(例如+sym或sym | 0).- 使用松散相等时,
Object(sym) == sym返回true.Symbol("foo") + "bar"抛出一个TypeError(不能将符号转换为字符串).例如,这可以防止您从符号静默创建新的字符串属性名称.- "更安全"的
String(sym)转换就像调用Symbol.prototype.toString()符号一样,但注意new String(sym)会抛出.
此行为记录在抽象ToString操作下的规范中:
参数类型:符号
结果:抛出
TypeError异常.
同样对于抽象ToNumber操作:
参数类型:符号
结果:抛出
TypeError异常.
要将a Symbol转换为不带a的字符串TypeError,必须使用toString方法或String().