符号

状态: 初稿

介绍

自 ECMAScript 2015 开始, symbolnumberstring 一样, 成为一种原始数据类型.

symbol 值通过 Symbol 构造函数创建.

1
2
3
let sym1 = Symbol();

let sym2 = Symbol("key"); // optional string key

符号具有持久性, 唯一性.

1
2
3
4
let sym2 = Symbol("key");
let sym3 = Symbol("key");

sym2 === sym3; // false, symbols are unique

如同字符串, 符号也能承担对象属性键的角色.

1
2
3
4
5
6
7
const sym = Symbol();

let obj = {
[sym]: "value"
};

console.log(obj[sym]); // "value"

符号可与计算出的属性声明联合定义对象属性和类成员.

1
2
3
4
5
6
7
8
9
10
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 方法调用.

一个返回字符串中匹配指定正则表达式的下标的正则表达式方法. 由 String.prototype.search 方法调用.

Symbol.species

一个用于创建派生对象的构造器函数的函数属性.

Symbol.split

一个把字符串从匹配指定正则表达式的下标处分割的正则表达式方法.
String.prototype.split 方法调用.

Symbol.toPrimitive

一个把对象转换为对应原始类型的方法.
ToPrimitive 抽象操作调用.

Symbol.toStringTag

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

Symbol.unscopables

一个对象, 它自身的属性名是从相关联对象的 ‘with’ 环境绑定中排除的属性名.

如果这篇文章对您有用,可以考虑打赏:)