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值,指向语言内部使用的方法。

All rights reserved please indicate the source if reprint---吓尿了的大肥鼠
原文地址:https://www.cnblogs.com/realsoul/p/5540194.html