1. 程式人生 > 實用技巧 >Symbol資料型別

Symbol資料型別

symbol解決了變數命名衝突的問題。

定義

描述資訊每個Symbol都是獨一無二的通過遍歷是獲取不到symbol

遍歷不能獲取symbol,在物件中,獲取symbol要加 []

symbol常用方法:

1、Object.getOwnPropertySymbols函式獲取symbol型別的屬性

1 2 3 4 console.log(Object.getOwnPropertySymbols(obj)); Object.getOwnPropertySymbols(obj).forEach(item => { console.log(item); })

  

2、Reflect.ownKeys函式同時獲取字串型別的屬性和獲取symbol型別的屬性

1 2 console.log(Reflect.ownKeys(obj)); Reflect.ownKeys(obj).forEach(item => console.log(obj[item]))

  

3、Symbol.for函式函式作用:根據引數名,去全域性環境中搜索是否有以該symbol.for()引數為名的symbol值,有就返回它,沒有就以該引數名來建立一個新的symbol值

1 2 3 let n1 = Symbol.for('name');
let n2 = Symbol.for('name'); console.log(n1==n2);//true

  

4、KeyFor函式作用:返回一個以被登記在全域性環境中的symbol值的key,沒有就返回undefined。

全域性的symbol

let sym1 = Symbol.for("name")

如果name在全域性未建立,則會在全域性建立Symbol

如果name已經建立了,則會返回全域性的Symbol

1 2 3 4 let n3 = Symbol('name'); console.log(n1==n3);//false console.log(Symbol.keyFor(n1));//name
console.log(Symbol.keyFor(n3));//undefined