Symbol
Posted Beat Yourself
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symbol相关的知识,希望对你有一定的参考价值。
一、主要用途
1、感觉Symbol值很鸡肋的话,先去理清 ‘字符串‘、‘变量名‘、‘属性名‘之间的关系 ;//变量名就是一个代号 主要是:Symbo值可以代替‘字符串‘成为属性名
2、保证每个属性是独一无二的,防止属性名冲突;
3、是函数Symbol()的返回值;
4、Symbol值可以显式转为字符串;
5、Symbol值也可以转为布尔值,但是不能转为数值;
二、Symbol值的创建和获取
1、Symbol([symbolName]);
2、Symbol.for(symbolName);
- 会被登记在全局环境中供搜索
- 不会每次调用就返回一个新的Symbol类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值
3、Symbol.keyFor(symbolName);
- 返回一个已登记的Symbol类型值的key
三、作为属性名
1、不能用"."运算符
2、在对象的内部,使用Symbol值定义属性时,Symbol值必须放在方括号之中。
3、Symbol值作为属性名时,该属性还是公开属性,不是私有属性。
四、消除魔术字符串
1、魔术字符串:魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。
2、解决办法:写成对象的属性(命名空间),Symbol值
五、属性名的遍历
1、Object.getOwnPropertySymbols方法
返回一个数组,成员是当前对象的所有用作属性名的Symbol值。
2、Reflect.ownKeys方法可以返回所有类型的键名,包括常规键名和Symbol键名。
3、以Symbol值作为名称的属性,不会被常规方法遍历得到。我们可以利用这个特性,为对象定义一些非私有的、但又希望只用于内部的方法。
六、内置的Symbol值
11个内置的Symbol值,指向语言内部使用的方法。
以上是关于Symbol的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript ES6 奇妙的Symbol类型(╹ڡ╹ )