Symbol
唯一值,用于防止属性名冲突
- 使用Symbol()来创建值不会进行记录,所以无论值看起来是否一样都不会引用同一份内存地址。
没有构造函数,直接使用
let sybl = Symbol()
let syblObject = {
[sybl]: "通过唯一值创建"
}
可作为私有变量
不想被 for/in、for/of 遍历操作找到时可使用Symbol,若想找到时需使用
Reflect.ownKeys(syblObject)
Object.getOwnPropertySymbols(syblObject)
可添加描述信息
let sybl = Symbol("描述信息");
console.log(sybl.description); // 描述信息
可记录内存地址
使用Symbol.for()来创建值,下次再创建相同的值时会直接引用记录的内存地址。
let sybl1 = Symbol.for("记录内存地址");
let sybl2 = Symbol.for("记录内存地址");
console.log(sybl1 === sybl2); // true
console.log(sybl1.description); // 记录内存地址
// 等价于
console.log(Symbol.keyFor(sybl1)); // 记录内存地址
声明与访问
Symbol 声明和访问使用 []
请勿使用 .
[]
:操作变量属性
.
: 操作字符串属性