es6-Symbol用法
1.symbol概念
这种数据类型提供独一无二值
比如,在JS中,我可以通过数据类型生成变量a=number05,也可以生成b=nubmer05,这两个变量可以说是相等的。 但是用symbol生成的值是不重复,不相等,比如我用symbol生成a,b,a和b是不相等的。
2.symbol的作用
声明
{ let a1=Symbol();
let a2=Symbol();
console.log(a1===a2); }
结果为false
{ let a3=Symbol.for('a3');//第二个a3 为key值,在使用时会检验全局有没有注册过这个key值
let a4=Symbol.for('a3'); console.log(a3===a4); }
结果为true
因为两个取值的key值都是一样的
使用
{ let a1=Symbol.for('abc');
let obj={
[a1]:'123',//这里加上[]是为了取外面定义的a1的值,也就是abc
'abc':345,//虽然上面那个名字现在也叫abc,但那一个是Symbol变量
'c':456
}
console.log(obj); }
for(let [key,value] of Object.entries(obj))
{ console.log("qq",[key,value]); }
entries是拿不到Symbol的值的
要拿到Symbol的值
Object.getOwnPropertySymbols(obj).forEach(function(item)
{ console.log(obj[item]); })
得到的结果是123
Object.getOwnPropertySymbols()取得的结果是一个数组
可以用forEach遍历
如果我们希望obj像普通对象一样取到所以值
我们可以使用Reflect.ownKeys(),取到的值也是一个数组
Reflect.ownKeys(obj).forEach(function(item){ console.log('ownKeys',item,obj[item]);
})
这样就可以取到了