ES 之 Symbol

生成唯一标识
  • Symbol类型的key是不能通过Object.keys()或者for...in来枚举的,它未被包含在对象自身的属性名集合(property names)之中。
  • 所以,利用该特性,我们可以把一些不需要对外操作和访问的属性使用Symbol来定义
  • 也正因为这样一个特性,当使用JSON.stringify()将对象转换成JSON字符串的时候,Symbol属性也会被排除在输出内容之外
const peter=Symbol()
const tom=Symbol()


const classRoom={
    [Symbol('Lily')]:{grade:60,gender:2},
    Tom:{grade:60,gender:1},
    [Symbol('Lily')]:{grade:90,gender:2},
}
console.log("keys:",Object.keys(classRoom)) //只有tom
for (const c in classRoom){
    console.log(c)
}
const syms=Object.getOwnPropertySymbols(classRoom) //除了没tom的

console.log(syms)
获取Symbol的属性
// 使用Object的API
Object.getOwnPropertySymbols(obj) // [Symbol(name)]

// 使用新增的反射API
Reflect.ownKeys(obj) // [Symbol(name), 'age', 'title']
使用Symbol来替代常量保证唯一
注册和获取全局Symbol

通常情况下,我们在一个浏览器窗口中(window),使用Symbol()函数来定义和Symbol实例就足够了
但是,如果你的应用涉及到多个window(最典型的就是页面中使用了

posted @ 2020-06-13 17:19  H&K  阅读(346)  评论(0)    收藏  举报