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) // trueSymbol.for("1") === Symbol.for(2) // falseSymbol("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