es6象征的实现方法示例

  


  

  

ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是ES6引入象征的原因。
  ES6引入了一种新的原始数据类型符号,表示独一无二的值。它是JavaScript语言的第七种数据类型,前六种是:定义,null,布尔值(布尔),字符串(字符串),数值(数量),对象(对象)。
  符号值通过符号函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的符号类型。凡是属性名属于符号类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。
  

        让s=符号();      typeof年代//跋笳鳌?   之前      

上面代码中,变量年代就是一个独一无二的值.typeof运算符的结果,表明变量年代是符号数据类型,而不是字符串之类的其他类型。
  

  

注意,象征函数前不能使用新命令,否则会报的错。这是因为生成的象征是一个原始类型的值,不是对象。也就是说,由于符号值不是对象,所以不能添加属性。基本上,它是一种类似于字符串的数据类型。
  符号函数可以接受一个字符串作为参数,表示对象征实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。
  

        让s1=符号(“foo”);   让s2=符号('酒吧');      s1//符号(foo)   s2//符号(酒吧)      s1.toString()//狈?foo)”   s2.toString()//狈?bar)”      之前      

上面代码中,s1和s2是两个符号值。如果不加参数,它们在控制台的输出都是(),象征不利于区分。有了参数以后,就等于为它们加上了描述,输出的时候就能够分的清,到底是哪一个值。
  

  

如果象征的参数是一个对象,就会调用该对象的toString方法,将其转为字符串,然后才生成一个符号值。
  

        const obj={   toString () {   返回“abc”;   }   };   const sym=符号(obj);   信谊//符号(abc)      

注意,象征函数的参数只是表示对当前符号值的描述,因此相同参数的符号函数的返回值是不相等的。
  

     //没有参数的情况   让s1=符号();   让s2=符号();      s1===s2//假的//有参数的情况   让s1=符号(“foo”);   让s2=符号(“foo”);      s1===s2//假的      之前      

上面代码中,s1和s2都是符号函数的返回值,而且参数相同,但是它们是不相等的。
  

  

符号值不能与其他类型的值进行运算,会报错。
  

        让信谊=符号(“我的象征”);      “你的符号”+符号//TypeError:不能将符号转换为字符串   你的符号是$ {sym} '//TypeError:不能将符号转换为字符串   之前      


  

  值

由于每一个符号都是不相等的,这意味着符号值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。这对于一个对象由多个模块构成的情况非常有用,能防止某一个键被不小心改写或覆盖。
  

        让mySymbol=符号();//第一种写法   让一个={};   [mySymbol]=澳愫?”;//第二种写法   让一个={   [mySymbol]:“你好!”   };//第三种写法   让一个={};   Object.defineProperty (mySymbol,{价值:“你好!'});//以上写法都得到同样结果   [mySymbol]//澳愫?”      

上面代码通过方括号结构和Object.defineProperty,将对象的属性名指定为一个符号值。
  

  

注意,符号值作为对象属性名时,不能用点运算符。
  

        const mySymbol=符号();   const={};      一个。mySymbol=澳愫?”;   [mySymbol]//定义   [' mySymbol ']//澳愫?”      之前      

上面代码中,因为点运算符后面总是字符串,所以不会读取mySymbol作为标识名所指代的那个值,导致的一属性名实际上是一个字符串,而不是一个符号值。
  

  

同理,在对象的内部,使用符号值定义属性时,符号值必须放在方括号之中。

es6象征的实现方法示例