Symbol

产生原因:

由于在es5中,对象的属性都是字符串,很容易出现属性冲突的情况。比如我们使用一个他人提供的对象,但是我们又想给这个对象添加一些属性,这个时候就很容易出现属性冲突的情况。这时,我们希望有一种机制能够创建独一无二的值,Symbol就出现了

Symbol是一种新的原始数据类型Symbol
//创建不同的值:
Symbol('string')  //接受一个string参数,表示对当前Symbol值的描述。
//创建两个相同的值:
Symbol.for('string');
//返回一个已经登记的Symbol类型的key
Symbol.keyFor();
Symbol() 和 Symbol.for()的区别

Symbol.for()在创建之前,会先搜索有没有以该参数为名称的Symbol值,如果有的话,就会直接取这个值,如果没有的话,才会创建新的Symbol。Symbol在创建之前不会进行搜索,直接创建。

Symbol的特点:
  • Symbol值不能与其他类型的值进行运算,否则会报错。
  • Symbol值可以显示的转换为字符串和布尔值,但是不能转换为数值。
  • Symbol值作为对象的属性值时,不能用点运算符,因为点运算符后面跟的是字符串,并不是Symbol值,所以在对象内使用Symbol属性时,要放在[]中
属性名的遍历:

for....in, for ....of,Object.keys(),Object.getOwnPropertyNames()都不能返回Symbol值的属性名。

//获取指定对象的所有的Symbol属性名
Object.getOwnPropertySymbols();
Reflect.ownKeys();
内置的Symbol值
Symbol.hasInstance;
Symbol.isConcatSpreadable;
Symbol.species;
Symbol.match;
Symbol.replace;
Symbol.search;
Symbol.split;
Symbol.iterator;
Symbol.toPrimitive;
Symbol.toStringTag;
Symbol.unscopables;
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加...
    oWSQo阅读 589评论 1 3
  • 1.概述 ES5的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象...
    赵然228阅读 874评论 2 10
  • 概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添...
    米诺zuo阅读 411评论 0 0
  • Symbol Symbol 是一个符号对象,是es6新添加的数据类型,通过Symbol()可以得到一个唯一的值,所...
    文仔CXKSNLXX阅读 642评论 0 0
  • 概述 产生原因 ES6的对象属性名都是字符串,容易造成属性名的冲突,为避免冲突,引入Symbol机制,保证每个属性...
    瑶九九阅读 342评论 0 0

友情链接更多精彩内容