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

Symbol的特点

symbol定义的对象属性通过object.key(object)得不到键名,使用for…in也拿不到,但可以通过反射键API得到。reflect.ownKey(obj)就可以得到symbol类型的键名。
通常定义方式:let name=symbol()
扩展定义方式:let name=symbol.for(“描述性语言”)
在这里插入图片描述
根据symbol的特点可以有以下使用场景:
(1)因为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
(2)可以用来代替常量const。
可能比较迷惑,有const了为什么还要用Symbol代替。
const在定义多个常量,且需要多个常量之间毫无关系,就需要给每个常量赋值,且为了程序的可读性,每个值需要有不同的意义。
这个时候就可以用symbol()声明变量,不用赋初值,每个变量也会毫无关系。
(3)可以用来存储比较保密的方法和属性
在写不想公开的方法和属性时,我们可以在一个JS文件中用Symbol()来定义类的属性,方法,在另一个js文件中进行传值就可以,但不可以访问。
由于外文件不可以访问到symbol()定义的属性,如果多个window窗口想要使用同一个symbol定义的属性就不能实现。此时可以用symbol.for()进行定义多个属性,但实质上指向同一个。

练习:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值