美文网首页
ES6 Symbol类型

ES6 Symbol类型

作者: noyanse | 来源:发表于2019-10-11 18:56 被阅读0次

    每个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(最典型的就是页面中使用了<iframe>),并需要这些window中使用的某些Symbol是同一个,那就不能使用Symbol()函数了,因为用它在不同window中创建的Symbol实例总是唯一的,而我们需要的是在所有这些window环境下保持一个共享的Symbol。这种情况下,我们就需要使用另一个API来创建或获取Symbol,那就是Symbol.for(),它可以注册或获取一个window间全局的Symbol实例:

    let gs1 = Symbol.for('global_symbol_1')  //注册一个全局Symbol
    let gs2 = Symbol.for('global_symbol_1')  //获取全局Symbol
    
    gs1 === gs2  // true
    

    这样一个Symbol不光在单个window中是唯一的,在多个相关window间也是唯一的了。

    相关文章

      网友评论

          本文标题:ES6 Symbol类型

          本文链接:https://www.haomeiwen.com/subject/ewxtmctx.html