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