Symbol資料型別
阿新 • • 發佈:2020-09-02
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
|