作用
表示独一无二的值。
举个栗子:
let a1 = Symbol();
let a2 = Symbol();
console.log(a1===a2); //false
用Symbol声明的两个变量绝对不相等!
那么问题来了,如果我们希望重用一个Symbol值怎么办?
Symbol.for()
let a1 = Symbol.for('foo');
let a2 = Symbol.for('foo');
console.log(a1===a2); //true
如何获取Symbol值呢?
这里要注意,for…of、for…in 是取不到symbol值的
let a1 = Symbol.for('abc');
let obj={
[a1]:'123',
'abc':345,
'c':456
};
console.log('obj',obj);
for(let [key,value] of Object.entries(obj)){
console.log('let of',key,value);
}
Object.getOwnPropertySymbols(obj).forEach(function(item){
console.log(obj[item]);
})
由此可见:for…of…方法只能返回 非 Symbol 类型;Object.getOwnPropertySymbols()接口只能返回 Symbol 类型。
有什么办法可以同时返回普通类型+Symbol类型呢?
用 Reflect 方法
Reflect.ownKeys(obj).forEach(function(item){
console.log('ownkeys',item,obj[item]);
})