Symbol--ES6

1.什么是Symbol

es5的对象属性名都是字符串,这容易造成属性名的冲突,因此ES6引入一种新的原始数据类型Symbol,表示独一无二的值。它是js中第7种数据类型。

注意:Symbol函数前不能使用new命令,否则会报错,因为生成的Symbol是一个原始类型的值,不是对象。

Symbol函数可以接受一个字符串作为参数,表示对Symbol实例的描述,如果传入的是一个对象则调用该对象的toString()方法将其转化为字符串。Symbol函数的参数只表示对当前Symbol值的描述,因此相同参数的Symbol函数返回值是不相等的。Symbol值不能与其他类型的值进行运算,否则会报错,Symbol值可以显式转化为字符串或布尔值,但是不能转为数字。Symbol值作为对象属性名时不能使用点运算符,因为点运算符后面总是字符串,同理,在对象内部,使用Symbol值定义属性时,Symbol值必须放在方括号中。

2.Symbol.for() Symbol.keyFor()

Symbol.for()与Symbol()这两种写法都会生成新的Symbol。它们的区别是,前者会被登记在全局环境中供搜索,而Symbol.for()不会在每次调用时都返回一个新的Symbol类型的值,而是会先检查给定的Key是否已经存在,如果不存在才会新建一个值。Symbol.for()为Symbol值登记的名字是全局环境的,可以在不同的iframe或servise worker中取到同一个值。

Symbol.keyFor()返回一个已经登记的Symbol类型值的key.

3.内置的Symbol值

3.1Symbol.hasInstance

Symbol.hasInstance属性指向一个内部方法,对象使用instanceof运算符会调用这个方法,判断该对象是否为某个构造函数的实例。

3.2Symbol.isConcatSpreadable

对象的Symbol.isConcatSreadable属性等于一个布尔值,表示该对象使用Array.prototype.concat()时是否可以展开。

3.3.Symbol.species

对象的Symbol.species属性指向当前对象的构造函数。创造实例时默认会调用这个方法,即使用这个这个属性返回的函数当作构造函数来创造新的实例对象

3.4Symbol.match

指向一个函数,当执行str.match(myObject)时,如果该属性存在,会调用它返回该方法的返回值。

3.5Symbol.replace

对象的Symbol.replace属性指向一个方法,当对象被String.prototype.replace方法调用时返回该方法的返回值。

3.6Symbol.search

对象的Symbol.search属性指向一个方法,当前对象String.prototype.search方法调用时会返回该方法的返回值

3.7Symbol.split

对象的Symbol.split属性指向一个方法,当对象被String.prototype.split方法调用时会返回该方法的返回值

3.8Symbol.iterator

对象的Symbol.iterator属性指向该对象的默认·遍历器

3.9Symbol.toPrimitive

对象被转为原始类型的值时会调用这个方法,返回该对象对应的原始类型值

3.10Symbol.toStringTag

在对象上调用Object.prototype.toString方法时,如果这个属性存在,其返回值会出现在toString方法返回的字符串中,表示对象的类型。

3.11Symbol.unscopables

对象的Symbol.unscopables属性指向一个对象,指定了使用with关键字时哪些属性会被with环境排除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值