ES6 新增的 symbol 类型的特点和使用场景

Symbol 的特点

symbol 定义的对象属性通过 object.key(object) 得不到键名,使用 for…in 也拿不到,但可以通过反射键 API 得到。reflect.ownKey(obj) 就可以得到 symbol 类型的键名。
通常定义方式:let name=symbol()
扩展定义方式:let name=symbol.for(“描述性语言”)

Symbol 使用场景:

  • 因为symbol是一种类型,那么就可以用来定义对象的属性名
const name=Symbol()
const age=Symbol()
let obj=
{
[name]:“zhang san”
}
obj[age]=20
console.log(obj[name]); // zhangsan
console.log(obj[age]); // 20
  • 可以用来代替常量 const。
    可能比较迷惑,有const了为什么还要用Symbol代替。
    const在定义多个常量,且需要多个常量之间毫无关系,就需要给每个常量赋值,且为了程序的可读性,每个值需要有不同的意义。
    这个时候就可以用symbol()声明变量,不用赋初值,每个变量也会毫无关系。
  • 可以用来存储比较保密的方法和属性
    在写不想公开的方法和属性时,我们可以在一个 JS 文件中用 Symbol() 来定义类的属性,方法,在另一个 JS 文件中进行传值就可以,但不可以访问。
    由于外文件不可以访问到 symbol() 定义的属性,如果多个window 窗口想要使用同一个 symbol 定义的属性就不能实现。此时可以用 symbol.for() 进行定义多个属性,但实质上指向同一个。
点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注