ES6 Symbol
Posted 张仪ranck
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6 Symbol相关的知识,希望对你有一定的参考价值。
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
以上是关于ES6 Symbol的主要内容,如果未能解决你的问题,请参考以下文章