Symbol的使用
是什么?
Symbol是ES6中新增的一个基本数据类型,翻译为符号。
为什么?
在ES6之前,对象的属性名都是字符串形式,那么很容易造成属性名的冲突;
- 如原来有一个对象,我们希望在其中添加一个新的属性和值,但是我们在不确定它原来内部有什么内容的情况下,很容易造成冲突,从而覆盖掉它内的某个属性;
- 如仿照实现apply、call、bind实现时,我们有给其中添加一个fn属性,那么如果它内部原来已经有了fn属性了
呢? - 比如开发中我们使用混入,那么混入中出现了同名的属性,必然有一个会被覆盖掉;
Symbol就是为了解决上面的问题,用来生成一个独一无二的值。
- Symbol值是通过Symbol函数来生成的,生成后可以作为属性名;也就是在ES6中,对象的属性名可以使用字符串,也可以使用Symbol值;
- Symbol即使多次创建值,它们也是不同的:Symbol函数执行后每次创建出来的值都是独一无二的;
- 可以在创建Symbol值的时候传入一个描述description:这个是ES2019(ES10)新增的特性;
使用示例
使用symbol创建相同的值
使用Symbol.for方法来做到这一点;
并且我们可以通过Symbol.keyFor方法来获取对应的key;