ES6--(6)符号

    符号对象(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)符号)