Symbol
大约 1 分钟
Symbol
Symbol 是一个类似字符串的基本类型(JavaScript的第七个基本类型),用于防止对象相同属性重冲突。
const s1 = Symbol()
const s2 = Symbol('foo')
const s3 = Symbol({
toString() {
return 'abc';
}
})
调用
symbol函数不能使用new关键字参数可以是字符串或者是对象,对象则会调用
toString方法后的返回值作为symbol值,参数即是Symbol的描述,可通过.description获取相同参数名的symbol值是不一样的,因此也保证了唯一性
symbol值不能进行计算,会报错
支持转成字符串/布尔值,不能转化成数值
Symbol 值作为对象属性名是,不能用点运算符
Symbol可以定义一组常量,保证这组常量的值都是不相等的
有利于消除“魔术字符串”(魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值)
不支持
for...in、for...of、Object.keys()、Object.values()、Object.entries()、Object.getOwnPropertyNames()获取/遍历Symbol值,但提供了Object.getOwnPropetySymbols()获取对象所有Symbol名。因此可以为对象定义非私有但内部需要使用的变量Reflect.ownKeys()可以获取对象的所有属性名(包括常规键名和 Symbol 键名)Symbol.for(),会从全局Symbol注册表中查找,如果没有则生成一个,有则返回对应的Symbol
Symbol.keyFor(),返回已经登记的Symbol的描述descriptor