Symbol
Symbol是ES6新引入的一种数据类型,是JavaScript的第七种语言,前六种分别是,null,undefined,string,boolean,Number,Object
引入symbol的好处,解决了变量冲突的问题,因为symbol可以表示一个独一无二的值,这就从根本上防止方法或者属性名的冲突
//1.symbol值不相等
let s1 = Symbol() //生成一个symbol类型的数据
let s2 = Symbol()
console.log( s1 == s2 ) //结果是false
//symbol 不能计算 计算时候无法转换 可以隐式转换为Boolean
let name = Symbol()
let age = Symbol()
let obj = {
[name]:'xiong1',
[age]:'22'
}
console.log( obj ) //symbol需要通过这个来获取 Symbol(): "xiong1" Symbol(): "22"
let name1 = Symbol('name') //作为参数可以作为标记
let age2 = Symbol('age')
let obj2 = {
name:'xu',
[name1]:'xiong1',
[age2]:'22'
}
console.log( obj2 ) //Symbol(age): "22" Symbol(name): "xiong1"
// symbol 不能用 for in遍历li
for (const val in obj2) {
console.log( val ) //打出的是普通属性
}
console.log(Object.getOwnPropertySymbols(obj2)); //打印出的就是所有的symbol对象
//通过 Reflect.ownKeys() 来获取普通属性和对象属性
console.log(Reflect.ownKeys(obj2)); //["name", Symbol(name), Symbol(age)]
Reflect.ownKeys(obj2).map(item=>{
console.log(item,obj2[item ])
})