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个
- Symbol.hasInstance (instanceof )
- Symbol.isConcatSpreadable (concat 数组操作时,是否开展)
- Symbol.species
- Symbol.match
- Symbol.replace
- Symbol.search
- Symbol.split
- Symbol.iterator
- Symbol.toPrimitive
- Symbol.toStringTag
- Symbol.unscopables