0
A
回答
4
符號的優點是它們是唯一的,不能與另一個實例衝突(假設你沒有使用全局符號註冊表)。這對庫對象的模塊化,對象代理和向前兼容擴展很重要。
請考慮以下情形:您爲瀏覽器編碼。您修改原型,讓我們說HTMLElement,爲您的庫添加一個新的屬性。 現在whatwg/w3c出現併爲標準添加一個同名的屬性。突然你的圖書館與網絡標準衝突。
類似的事情發生在你繼承庫方法時。導入庫的新版本,它突然可能會有新的方法與您的相沖突。
這不會發生在符號中,因爲您首先實例化一個新的,自定義的本地符號,它不會與其他符號發生衝突。那麼你可以使用它作爲不會與任何第三方代碼相沖突的密鑰。
使用模塊,您可以簡單地將模塊的符號導出爲常量,使其可以被其他模塊訪問,但只能通過適當的基於模塊的命名空間來再次避免衝突。
類也可以使用它們表示符合某些接口(因爲JavaScript沒有多重繼承或接口),如Symbol.iterator不會冒名稱衝突或不得不妥協在其自己的方法名稱。
此外,它們也可以用作函數參數來避免魔術字符串常量,當它們與相同參數中的常規字符串處理混合時,這些常量可能會特別危險。更不用說,一個未聲明的符號(通常作爲一個常量導入)可能會導致比未知字符串傳入更多可預測的錯誤,並且簡單地通過方法中的特殊框架。
它們也可能提供性能優勢,因爲與符號比較基本上是O(1)指針比較而不是字符串比較。至少在編譯器無法推斷字符串常量相同的情況下。
相關問題
- 1. MATLAB:從char數據類型轉換爲符號數據類型
- 2. 不同的數據類型 - 符號和無符號
- 3. 什麼是無符號數據類型?
- 4. msvc數據類型字是有符號還是無符號?
- 5. MySQL數據類型 - 有符號無符號
- 6. MATLAB:從符號數據類型到數字數據類型轉換
- 7. Oracle編號數據類型
- 8. Simulink信號數據類型
- 9. Oracle號碼數據類型
- 10. XML數據類型的字符串不允許符號
- 11. 面向列的DBMS中的無符號整數數據類型
- 12. C++從無符號的隱式數據類型轉換爲帶符號的
- 13. 關於數據類型和用逗號
- 14. 哪些數據類型用於序號?
- 15. Cortex-M3的數據類型:有符號整數
- 16. 如何解碼嵌入符號的數字數據類型?
- 17. haskell自己的數據類型 - 在數據類型定義中使用符號或數字
- 18. 如何減少用戶數據類型符號? (typedef?)
- 19. pySpark數據幀「斷言isinstance(數據類型數據類型),‘數據類型應該是數據類型’
- 20. 如何在C#中編組數據類型無符號字符**?
- 21. 我的Sql Server 2008中的無符號短數據類型r2
- 22. C++ 11類型(有符號+無符號)?
- 23. 無法解析用作泛型類型參數的符號
- 24. 在char數據類型中的撇號
- 25. Hive支持無符號數字數據類型
- 26. 如何獲得iphonesdk中的無符號字符數據類型的字節數
- 27. JSON字符串化加引號「」中的float類型數據
- 28. C++中數據類型之後的符號'^'是什麼意思?
- 29. 什麼是「符號」的原始數據在JavaScript類型
- 30. 是否存在以Java存儲符號的數據類型
它最初也應該提供私有方法,但實際實現並不那麼私密。我個人更喜歡[WeakMaps](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/WeakMap)。 – 2015-02-10 16:25:04