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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。