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

张仪ranck
410 声望9 粉丝

下一篇 »
html5的拓展