Symbols

符号

介绍

从 ECMAScript 2015 开始,symbol是一种原始数据类型,就像numberstring

symbol值是通过调用Symbol构造函数创建的。

let sym1 = Symbol( let sym2 = Symbol("key" // optional string key

符号是不可改变的,并且是唯一的。

let sym2 = Symbol("key" let sym3 = Symbol("key" sym2 === sym3; // false, symbols are unique

就像字符串一样,符号可以用作对象属性的关键字。

let sym = Symbol( let obj = { [sym]: "value" }; console.log(obj[sym] // "value"

符号也可以与计算属性声明结合来声明对象属性和类成员。

const getClassNameSymbol = Symbol( class C { [getClassNameSymbol](){ return "C"; } } let c = new C( let className = c[getClassNameSymbol]( // "C"

众所周知的符号

除了用户定义的符号之外,还有众所周知的内置符号。内置符号用于表示内部语言行为。

以下是一些着名符号的列表:

Symbol.hasInstance

一种确定构造函数对象是否将对象识别为构造函数实例之一的方法。由instanceof操作符的语义调用。

Symbol.isConcatSpreadable

一个布尔值,指示对象应该通过 Array.prototype.concat 平铺到其数组元素。

Symbol.iterator

一个返回对象的默认迭代器的方法。由 for-of 语句的语义调用。

Symbol.match

一个正则表达式方法,用于将正则表达式与字符串相匹配。由该String.prototype.match方法调用。

Symbol.replace

用于替换字符串的匹配子字符串的正则表达式方法。由String.prototype.replace方法调用。

Symbol.search

一个正则表达式方法,它返回与正则表达式匹配的字符串中的索引。由String.prototype.search方法调用。

Symbol.species

一个函数值属性,是用于创建派生对象的构造函数。

Symbol.split

正则表达式方法,用于在匹配正则表达式的索引处拆分字符串。由该String.prototype.split方法调用。

Symbol.toPrimitive

将对象转换为相应的原始值的方法。由ToPrimitive抽象操作调用。

Symbol.toStringTag

一个字符串值,用于创建对象的默认字符串描述。由内置方法调用Object.prototype.toString

Symbol.unscopables

一个Object,其自己的属性名称是从关联对象的 'with' 环境绑定中排除的属性名称。