Symbols
符号
介绍
从 ECMAScript 2015 开始,symbol
是一种原始数据类型,就像number
和string
。
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' 环境绑定中排除的属性名称。