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