ES6 Symbol类型

每个Symbol实例都是唯一的

应用场景:

  1. 使用Symbol来作为对象属性名(key)
  2. Symbol类型的key是不能通过Object.keys()或者for...in来枚举的,
    利用该特性,我们可以把一些不需要对外操作和访问的属性使用Symbol来定义。
  3. 当使用JSON.stringify()将对象转换成JSON字符串的时候,Symbol属性也会被排除在输出内容之外
  4. 可以利用这一特点来更好的设计我们的数据对象,让“对内操作”和“对外选择性输出”变得更加优雅

获取Symbol属性

// 使用Object的API
Object.getOwnPropertySymbols(obj)
// 使用新增的反射API
Reflect.ownKeys(obj)

注册和获取全局Symbol

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