Symbol是es6新的数据类型。
Symbol所声明的值是唯一的,独一无二的。永远不可能相等。Symbol.for(key) 先检查是否声明了key值 如果未声明就相当于调用Symbol 如果已经声明了 就相当于获取这个Symbol
{ // 声明 let a1=Symbol(); let a2=Symbol(); console.log(a1===a2);//false let a3=Symbol.for(‘a3‘); let a4=Symbol.for(‘a3‘); console.log(a3===a4);//true }
Symbol的使用 可以使用Symbol声明属于自己的唯一的变量 当其他继承他的也可以声明同名属性 而不会报错 注意:Symbol声明的变量for of是不能获取到的
可以通过Object.getOwnPropertySymbols()获取Symbol变量
如果需要获取所有包括Symbol和非Symbol的属性 可以通过Reflect.ownKeys()来进行获取 (Reflect也是es6新增的方法,后续会进行总结)
{ 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);//adc c } Object.getOwnPropertySymbols(obj).forEach(function(item){ console.log(obj[item]); }) Reflect.ownKeys(obj).forEach(function(item){ console.log(‘ownkeys‘,item,obj[item]); }) }
时间: 2024-10-04 21:55:13