/**
* Symbol的用法
* 用Symbol声明的变量永远都不相等,是独一无二的
*/
{ // 声明
let a1=Symbol();
let a2=Symbol();
console.log(a1===a2); //false
//a3为key值,先去找全局变量中有没有a3这个变量,若有就是它,若没有就调用 Symbol()
let a3=Symbol.for('a3');
let a4=Symbol.for('a3');
console.log(a3===a4); //true
}
{ //symbol的应用场景
let a1=Symbol.for('abc');
let obj={
[a1]:'123', //若不使用symbol则a1代表key:'abc' ,与后面的key:'abc'相冲突
'abc':345,
'c':456
};
console.log('obj',obj);
//直接使用entries()拿不到symbol的属性和值
for(let [key,value] of Object.entries(obj)){
console.log('let of',key,value);
}
//只能通过.getOwnPropertySymbols()方法拿取,返回的是一个数组(但是只能拿到symbol的属性和值)
Object.getOwnPropertySymbols(obj).forEach(function(item){
console.log(obj[item]);
})
//通过Reflect.ownKeys() 方法拿取symbol 和 非symbol的属性和值(返回一个数组)
Reflect.ownKeys(obj).forEach(function(item){
console.log('ownkeys',item,obj[item]);
})
}
009-Symbol的用法
最新推荐文章于 2023-02-03 10:16:51 发布