发布于 2026-01-06 0 阅读
0

JavaScript 符号

JavaScript 符号

ES2015 为 JavaScript 带来了一次相当大的更新,引入了许多新特性,使其更加现代化。其中一项新增特性就是符号

什么

Symbol是 JavaScript 中一种新的基本类型,它的主要目的是:唯一性。

虽然objects 也是唯一的,但Symbols 的优势在于可以用作对象键。

如何

有一个全局函数,Symbol()每次调用都会返回一个新的唯一符号。

const mySymbol = Symbol();
const anotherSymbol = Symbol();

mySymbol === anotherSymbol // -> false
Enter fullscreen mode Exit fullscreen mode

附说明

我们还可以添加描述,以便日后区分它们:

const mySymbol = Symbol("xyz");

console.log(mySymbol); // -> symbol(xyz)
Enter fullscreen mode Exit fullscreen mode

请注意,这允许通过某种方式获取符号Symbol.for("xyz")。如果我们想要使用一个任何人都无法覆盖的唯一键,这可能会有问题。

Symbol()此外,即使使用相同的描述,每次调用都会产生一个唯一的符号。

众所周知的符号

还有一些预定义的符号,称为众所周知的符号

JavaScript 使用它们来确定对象的行为,而不会干扰我们的字符串键。

例如Symbol.iterator,这是用来标记迭代器方法的,Array以便在for循环中使用。

const myObject = {
  [Symbol.iterator] = function*() {
    yield "first value";
    yield "second value";
  }
};

for(let value of myObject) console.log(value);
Enter fullscreen mode Exit fullscreen mode

在这里,我们在键中为对象添加了一个生成器函数Symbol.iterator,这样就可以myObject与循环一起使用for

为什么

一个应用场景是向对象添加只有符号创建者才知道的键。

例如,ReactReact.createElement()会用一个自定义符号标记使用该函数创建的对象,以便后续识别它们是 React 元素。如果它们使用字符串,则可能会被意外覆盖。

如上所述,另一个用例是使用众所周知的符号使自定义对象表现得更像原生对象

文章来源:https://dev.to/kayis/javascript-symbolism-32hg