美文网首页
ES6--(6)符号

ES6--(6)符号

作者: wangxia34 | 来源:发表于2018-04-10 11:37 被阅读0次

    符号对象(Symbol)是ECMAScript 6 中新增的数据类型,通过Symbol可以创建一个唯一的值,由于这种特性使Symbol很适合做为标识符。

创建符号值

使用符号值

    可以在任意能使用“需计算属性名”的场合使用符号。还可以在Object.defineProperty()Object.defineProperties() 调用中使用它。

共享符号值

    ES6 提供了“全局符号注册表”。使用Symbol.for()方法可以创建共享符号。Symbol.for()方法仅接受单个字符串类型的参数,作为目标符号值的标识符,同时此参数也会成为该符号的描述信息。

    Symbol.for() 方法首先会搜索全局符号注册表,看是否存在该键值的符号值。若存在,该方法会返回这个已存在的符号值;否则,会创建一个新的符号值,并使用该键值将其记录到全局符号注册表中,然后返回这个新的符号值。这就意味着此后使用同一个键值去调用 Symbol.for() 方法都将会返回同一个符号值。

    共享符号值还有另一个独特用法,你可以使用 Symbol.keyFor() 方法在全局符号注册表中根据符号值检索出对应的键值。

符号值的转换

    符号值无法被转换成字符串或者数值。如果要将符号值转换成字符串,需用到String()方法,而该方法中使用了toString()方法。

检索符号属性

    ES6 新增了Object.getOwnPropertySymbols() 方法,以便可以检索对象的符号类型属性。Object.getOwnPropertySymbols() 方法会返回一个数组,包含了对象自有属性名中的符号值。

使用知名符号暴露内部方法

    ES6 允许使用符号类型的原型属性来定义某些对象的基础行为。

    ES6 定义了“知名符号”来代表 JS 中一些公共行为,而这些行为此前被认为只能是内部操作。每一个知名符号都对应全局 Symbol 对象的一个属性,例如 Symbol.create 。

    “知名符号”使用了全局符号常量(例如 Symbol.hasInstance ),为常规对象定义了一些功能,而这些功能原先仅限内部使用。这些符号按规范使用 Symbol. 的前缀,允许开发者通过多种方式去修改常规对象的行为。

        1、Symbol.hasInstance :供 instanceof 运算符使用的一个方法,用于判断对象继承关系。

        2、Symbol.isConcatSpreadable :一个布尔类型值,在集合对象作为参数传递给Array.prototype.concat() 方法时,指示是否要将该集合的元素扁平化。

        3、Symbol.iterator :返回迭代器的一个方法。

        4、Symbol.match :供 String.prototype.match() 函数使用的一个方法,用于比较字符串。

        5、Symbol.replace :供 String.prototype.replace() 函数使用的一个方法,用于替换子字符串。

        6、Symbol.search :供 String.prototype.search() 函数使用的一个方法,用于定位子字符串。

        7、Symbol.species :用于产生派生对象(参阅第八章)的构造器。

        8、Symbol.split :供 String.prototype.split() 函数使用的一个方法,用于分割字符串。

        9、Symbol.toPrimitive :返回对象所对应的基本类型值的一个方法。

        10、Symbol.toStringTag :供 String.prototype.toString() 函数使用的一个方法,用于创建对象的描述信息。

        11、Symbol.unscopables :一个对象,该对象的属性指示了哪些属性名不允许被包含在with 语句中。

相关文章

  • ES6--(6)符号

    符号对象(Symbol)是ECMAScript 6 中新增的数据类型,通过Symbol可以创建一个唯一的值,由...

  • 深入理解ES6--解构

    深入理解ES6--解构

  • 2019-10-21Vue脚手架安装命令(mac版)

    安装脚手架的命令(终端) 项目安装(终端安装) babel转译es6-->es5 -安装 babel babel ...

  • ES6--数组篇

    新增的四个方法map 映射 一对一 [50,56,90,57,99] => ['不及格','不及格...

  • ES6--面向对象

    1 class关键字、构造器和类分开了2 class里面直接加方法 继承: super--超类(父类)

  • ES6--(3)函数

    带参数默认值的函数 JS 函数的独特之处是可以接受任意数量的参数,而无视函数声明处的参数数量。 在 ES5 中模拟...

  • ES6--函数扩展

    函数新增特性 函数默认值,rest参数,扩展运算符,箭头函数,this绑定,尾调用 函数参数的默认值 rest参数...

  • ES6--对象扩展

    简洁表示法 在对象中如果有函数,es6中采用简洁表示,a(c){},如果在es6中定义一个函数,那么采用箭头函数l...

  • es6--数值扩展

    在es6中,二进制用0b表示,例如'0b1022221';八进制用0o表示;不区分大小写。 一些数值方法 Numb...

  • ES6--数组扩展

    1.Array.of() Array.of() 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型...

网友评论

      本文标题:ES6--(6)符号

      本文链接:https://www.haomeiwen.com/subject/ccughftx.html