乐趣区

关于es6:ES6-Symbol

Symbol(“haha”), 避免属性抵触;
根底数据类型,标识惟一值

  • 不能 new
  • 创立 Symbol()
  • 能够加形容 Symbol(“name”)
  • 能够作为对象属性名
  • 魔术字符串(比拟有用)switch
const shapeType = {triangle: Symbol()
};

switch(a) {case shapeType.triangle: ... // 确保 shapeType 外面的值的唯一性}
  • 属性名遍历

    • Object.getOwnPropertySymbols
    • for in 不能拜访到
    • Reflect.ownKeys (返回全副)
  • 定义相等 Symbol 值, Symbol.for

    Symbol.for("1") === Symbol.for(1) // true
    Symbol.for("1") === Symbol.for(2) // false
    Symbol("bar") === Symbol("bar") // false
    
  • Symbol.keyFor(s2)

    • Symbol.for 定义的 symbol 能够被 Symbol.keyFor 获取 key
    • 原生 Symbol 通过 Symbol.keyFor(s2) 失去 undefined
  • 单例模式

    const FOO_KEY = Symbol("foo")
    
    class A {}
    
    
    if (!global[FOO_KEY]) {global[FOO_KEY] = new A();}
    
    module.exports = global[FOO_KEY];
  • 内置 Symbol 值,11 个

    1. Symbol.hasInstance(instanceof)
    2. Symbol.isConcatSpreadable(concat 数组操作时,是否开展)
    3. Symbol.species
    4. Symbol.match
    5. Symbol.replace
    6. Symbol.search
    7. Symbol.split
    8. Symbol.iterator
    9. Symbol.toPrimitive
    10. Symbol.toStringTag
    11. Symbol.unscopables
退出移动版