TS — Symbol详解
symbol 是 TypeScript 中的基本数据类型之一,用于表示唯一的标识符。每个通过 Symbol() 构造函数创建的 symbol 值都是独一无二的,并且不可变。
1.创建 symbol:
可以使用 Symbol() 构造函数来创建一个新的 symbol 值:
let sym1 = Symbol(); let sym2 = Symbol("key");
sym1 和 sym2 都是通过 Symbol() 构造函数创建的 symbol 值。如果给 Symbol() 传递一个字符串参数,它将作为 symbol 的描述(可选)。
2.唯一性和不可变性:
每个 symbol 值都是唯一的,即使创建时使用相同的描述:
let sym1 = Symbol("key"); let sym2 = Symbol("key"); console.log(sym1 === sym2); // 输出: false
sym1 和 sym2 的描述相同,但它们是不同的 symbol 值,因此比较它们会返回 false。symbol 值是不可变的,不能被修改或重置。
3.作为对象属性的键:
symbol 值通常用作对象属性的键,由于每个 symbol 值都是唯一的,可以确保属性名不会与其他属性冲突:
const sym = Symbol(); let obj = { [sym]: "value" }; console.log(obj[sym]); // 输出: "value"
使用 symbol 值作为属性的键,可以通过 obj[sym] 来访问该属性的值。
4.系统内置的 symbol:
TypeScript 提供了一些内置的 symbol 值,称为系统内置 symbol。这些 symbol 具有特殊的含义,用于自定义对象的行为:
Symbol.iterator: 表示对象是可迭代的。Symbol.asyncIterator: 表示对象是可异步迭代的。Symbol.hasInstance: 用于自定义对象的 instanceof 操作。Symbol.toStringTag: 用于自定义对象的默认字符串描述。
这些系统内置 symbol 可以在对象上进行访问和使用,以实现特定的行为定制。
symbol 类型在 JavaScript 中引入了一种新的标识符机制,用于避免属性名冲突并提供独特性。它在 TypeScript 中被广泛应用于对象属性的键、自定义行为的定义等方面。
浙公网安备 33010602011771号