官术网_书友最值得收藏!

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來定義私有屬性及方法,例如:

主站蜘蛛池模板: 留坝县| 互助| 林芝县| 奉节县| 双牌县| 清远市| 通河县| 克拉玛依市| 大安市| 拜城县| 息烽县| 泗水县| 尉犁县| 鲁山县| 富川| 习水县| 黄骅市| 天水市| 商水县| 前郭尔| 隆尧县| 延吉市| 河源市| 沙雅县| 朝阳县| 象州县| 金沙县| 杭锦后旗| 高州市| 施秉县| 合江县| 水富县| 佛山市| 辉南县| 西藏| 栾川县| 潢川县| 庆云县| 汝州市| 阳泉市| 南投县|