ES6中的Symbol
上有一个.toString()
,它返回Symbol
的字符串表示形式,但想知道为什么'' + Symbol()
不起作用(运行此表达式会抛出TypeError
,我不期望)?后者是否只需在新的Symbol
上调用.toString()
并附加(+
)它为空字符串?将JavaScript符号转换为字符串?
6
A
回答
8
是后者只是一个新的
Symbol
调用.toString()
和append(+
)到空字符串?
实际上,符号不能隐式转换为字符串或数字,尽管有趣的是,您可以将它们隐式转换为布尔值。
在一些陷阱MDN actually has a section:
符号类型转换
有些事情与符号的类型转换工作时要注意。
- 当试图一个符号转换为一个数字,一个
TypeError
将被抛出(例如+sym
或sym | 0
)。- 当使用松散平等,
Object(sym) == sym
返回true.
Symbol("foo") + "bar"
抛出一个TypeError
(不能转换符号串)。例如,这可以防止您从符号中静静地创建新的字符串属性名称。- “安全”
String(sym)
转换的工作方式类似于使用符号调用Symbol.prototype.toString()
,但请注意new String(sym)
会丢失。
此行为规范记录下abstract ToString
operation:
参数类型:符号
结果:抛出一个
TypeError
例外。
,类似的还有abstract ToNumber
operation:
参数类型:符号
结果:抛出一个
TypeError
例外。
投下Symbol
为字符串没有TypeError
,你必须使用toString
方法,或String()
。
1
从https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toString。
Symbol对象重写Object对象的toString方法; 它不继承Object.prototype.toString()。对于Symbol对象, toString方法返回对象的字符串表示形式。
+0
这不回答这个问题,这就是为什么''+符号'不起作用。 – 2016-12-03 07:33:22
相关问题
- 1. 将单引号字符串转换为双引号字符串
- 2. 将字符串转换为数字Javascript
- 3. JavaScript将$字符串转换为数字
- 4. 将字符串转换为星号
- 5. 将字符串转换为字符串
- 6. 将字符串转换为字符串
- 7. 将字符串转换为字符串
- 8. javascript将双引号转换为字符串中的单引号
- 9. 将字符串转换为三重引号字符串
- 10. 将字符串[]转换为逗号分隔的字符串。
- 11. 矢量将字符串转换为逗号字符串?
- 12. 将逗号分隔字符串转换为多个字符串
- 13. 将十六进制字符串转换为无符号字符[]
- 14. 将无符号字符*转换为字符串
- 15. 将字符串转换为C中的无符号字符
- 16. 我可以将字符符号转换为字符串
- 17. 将字符串转换为无符号字符str
- 18. 将JSON转换为字符串JAVASCRIPT
- 19. JavaScript将警报转换为字符串
- 20. 将javascript字符串转换为数组
- 21. 将RGB转换为ColorName字符串Javascript
- 22. 将Bson转换为字符串 - MongoDB/Javascript
- 23. 将数组转换为字符串Javascript
- 24. 将字符串转换为javascript日期
- 25. JavaScript将字符串转换为日期
- 26. 将JavaScript字符串转换为整数
- 27. 将JavaScript字符串转换为日期
- 28. 将字符串转换为JavaScript的
- 29. 将字符串转换为JavaScript对象
- 30. JavaScript将字符串转换为散列
@Dai'''+ 123'作为隐式类型转换,但为什么'''+ Symbol()'即使被认为是隐式转换也不起作用? – Thomson
对不起,我误解了你的问题。你实际上看到了什么行为?你有'TypeError'还是其他的? – Dai
@戴,对不起,这个问题引起了困惑。修改了一下。我看到'''+ Symbol()'抛出了TypeError,并想知道为什么它会这样做,因为Symbol()。toString()'工作。 – Thomson