- React工程師修煉指南
- 開課吧組編 高少云 莫濤 韓明洋 余維海編著
- 509字
- 2021-04-14 11:28:40
1.4 Symbol
ES5中提供的6種數據類型分別是:Undefined、Null、布爾值(Boolean)、字符串(String)、數值(Number)和對象(Object)。ES6中新增一種數據類型Symbol來表示唯一的值。每一個創建的symbol都是唯一的,這樣在實際運用中可以創建一些唯一的屬性及定義私有變量。symbol的創建如下:

上述創建symbol后,調用時需要注意不像其他類型數據創建時需要加“new”運算符實例化,這里symbol都是直接調用函數。每個symbol都是獨一無二的,類型是Symbol,代碼如下:


上述代碼中,即使Symbol傳入的字符串是一樣的,但是最終s1和s2還是有區別的,這也驗證了symbol的唯一性。目前前端項目都會采用模塊化構建,為了防止對象屬性名被覆蓋,可以通過symbol來定義屬性名。在symbol出來之前會直接定義對象屬性名如下:

上述代碼在引用過程中可能會在追加屬性的時候造成屬性覆蓋的情況,如:

為了防止變量覆蓋的情況,可以通過symbol來定義對象屬性名,防止對象屬性被覆蓋:

這里也是利用symbol類型值唯一性的特征使得對象中屬性不會被覆蓋。利用symbol作為屬性名,屬性名不會被Object.keys()、Object.getOwnPropertyNames()、for……in循環或者返回。代碼如下:


symbol屬性并不是私有屬性,如果要獲取屬性名的symbol屬性可以通過Object.getOwnPropertySymbols()獲取對象的所有symbol屬性,同樣也可以通過Reflect.ownKeys()反射api來獲取屬性,代碼如下:

同樣可以在“類”里利用symbol來定義私有屬性及方法,例如:
