ES6 Symbol的简单使用

  • Symbol表示一个独一无二的值,防止对象属性名称的冲突
let s1=Symbol("foo")
let s2=Symbol("bar")
console.log(s1===s2)  false

let mySymbol=Symbol()
let obj={}
obj[mySymbol]="hello"   -------变量不能用.

  • 对象属性的遍历
let obj1={a:1}
let obj2={b:2}
Object.defineProperty(obj2,"b2",{
    enumerable:false,
    value:2
})
Object.setPrototypeOf(obj2,obj1)

console.log(obj2)

//遍历出对象自身和继承的可枚举的属性(不包含Symbol属性)
for(let k in obj2){

}
//遍历出对象自身可枚举的属性(不包含Symbol属性)
for(let k of Object.keys(obj2)){

}
//遍历自身对象的所有属性(包括不可枚举属性但不包括Symbol值作为名称的属性)
for(let k of Object.getOwnPropertyNames(obj2)){

}
let objSymbols=Object.getOwnPropertySymbols(obj2)   //返回一个给定对象自身的所有 Symbol 属性的数组。
for(let s of objSymbols){

}

Symbol.for和keyFor的使用

let s1=Symbol("bar")
let s2=Symbol("bar")
console.log(s1===s2)   false



//Symbol.for首先根据key检查是否存在,如果存在直接返回已有symbol
//如果不存在才会创建,并且放入全局环境中
let s3=Symbol.for("foo")
let s4=Symbol.foo("foo")
console.log(s3===s4)


let key=Symbol.keyFor(s3)
console.log(key)

//Symbol()不会在全局环境中注册
let key1=Symbol.keyFor(s1)
console.log(key1)
posted @ 2021-02-25 16:14  abcdefgab  阅读(76)  评论(0)    收藏  举报