[英]Why does implicit Symbol to String conversion' lead to TypeError in JavaScript?
[英]Symbols: How does implicit string conversion work in JavaScript?
閱讀JavaScript中有關Symbol
的文檔,並在一些環境(Chrome,Firefox,Node.js)中進行測試,我意識到我對隱式字符串轉換的理解是有缺陷的。
我總是給人一種印象,即嘗試轉換為字符串時會調用對象的toString()
方法,如果該函數未返回原語,則它將調用對象的toPrimitive()
方法,如果未返回工作它將類型錯誤。 但是,此說明未能涵蓋Symbol
引發的TypeError
:
var sym = Symbol("test"); try { console.log(sym + "ing"); } catch (error) { console.error(error); }
TypeError: Cannot convert a Symbol value to a string
但是很明顯Symbol
擁有有效的toString()
方法。 那么為什么不叫它呢?
沒錯,在執行隱式字符串轉換時會調用一個對象toString
方法。 但是, 如規范所述 ,對符號進行隱式字符串轉換會導致TypeError
。
鑒於字符串和符號都可以作為屬性鍵,因此您希望保護人們避免將符號意外轉換為字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.