TS — Symbol详解

symbol 是 TypeScript 中的基本数据类型之一,用于表示唯一的标识符。每个通过 Symbol() 构造函数创建的 symbol 值都是独一无二的,并且不可变。

1.创建 symbol:

可以使用 Symbol() 构造函数来创建一个新的 symbol 值:

let sym1 = Symbol();
let sym2 = Symbol("key");

sym1sym2 都是通过 Symbol() 构造函数创建的 symbol 值。如果给 Symbol() 传递一个字符串参数,它将作为 symbol 的描述(可选)。

2.唯一性和不可变性:

每个 symbol 值都是唯一的,即使创建时使用相同的描述:

let sym1 = Symbol("key");
let sym2 = Symbol("key");
console.log(sym1 === sym2); // 输出: false

sym1sym2 的描述相同,但它们是不同的 symbol 值,因此比较它们会返回 falsesymbol 值是不可变的,不能被修改或重置。

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 中被广泛应用于对象属性的键、自定义行为的定义等方面。

posted on 2024-04-07 17:19  萬事順意  阅读(159)  评论(0编辑  收藏  举报