1、创建symbol类型的变量
let sym1 = Symbol()
console.log(sym1);
console.log(typeof sym1);
let sym2 = Symbol(12)
console.log(sym2);
let sym3 = Symbol('ha')
console.log(sym3);
let sym4 = Symbol(true)
console.log(sym4);
let sym5 = Symbol(undefined)
console.log(sym5);
let sym6 = Symbol([10,20])
console.log(sym6);
console.log(sym2 == sym3);
console.log(sym2 === sym3);
let sym2Plus = Symbol(12)
// console.log(sym2 == sym3);
console.log(Object.is(sym2,sym2Plus));//false
2、Symbol是独一无二的值
3、Symbol的初衷:解决对象的属性名冲突。当symbol类型的变量当做对象的属性名时,要加[],获取属性值:对象[symbol属性名]
let a = Symbol('a')
let b = Symbol('b')
let obj = {
a:1,
b:2,
[a]:3,
[b]:4
}
console.log(obj);
4、for……in循环不能遍历symbol类型的变量
for(x in obj){
console.log(`属性名${x}:属性值${obj[x]}`);
}
5、Object.getOwnPropertySymbols():只能获取到对象中symbol类型的属性名,返回一个数组
console.log(Object.getOwnPropertySymbols(obj));
let arr1 = Object.getOwnPropertySymbols(obj);
console.log(arr1[0]);
console.log(obj[arr1[0]]);
6、Reflect.ownKeys():获取对象中所有类型的属性名,返回一个数组
7、Object.keys():获取到对象中所有非symbol的类型的属性名,返回一个数组
8、Object.values():获取到对象中所有非symbol的类型的属性值,返回一个数组
9、Symbol.for()
根据参数名,去全局环境中搜索是否有以该symbol.for()参数为名的symbol值,有就返回它,
没有就以该参数名来创建一个新的symbol值