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(最典型的就是页面中使用了

浙公网安备 33010602011771号