全面了解 ES6-ES10 中新的 Symbol 类型

阅读时长 5 分钟读完

在 ES6 中引入了一个新的基本数据类型 Symbol,用于表示独一无二的值。 Symbol 可以用来创建全局唯一的标识符,这些标识符可以用作对象属性的键值。在 ES6 之后,ES7、ES8、ES9 和 ES10 都对 Symbol 进行了扩展,让它变得更有用。

基础使用

Symbol 的用法非常简单。我们可以通过使用 Symbol() 来创建一个新的符号,例如:

这将返回一个全局唯一的符号。您也可以使用可选的描述参数来描述符号,例如:

由于 Symbol 是基础数据类型,因此不能使用 new 操作符进行实例化。

创建全局符号

通过在全局符号注册表中注册符号,您可以创建全局符号。这样的符号可以在多个文件或项目中使用,并且仍然是全局唯一的。 要在全局符号注册表中注册符号,请使用 Symbol.for() 方法:

这将返回一个全局符号,名为 "MyGlobalSymbol"。在以后的代码中,您可以通过用相同的名称调用 Symbol.for('MyGlobalSymbol') 来获取该符号。

额外的 Symbol 属性

Symbol 还有许多其他属性,这些属性可以让它更加有用。以下是一些例子:

Symbol.iterator

Symbol.iterator 用于定义对象的默认迭代器,例如:

-- -------------------- ---- -------
----- -------- - -
  ------------------ ----------- -
    ----- --
    ----- --
    ----- --
  -
--
--- ------ ----- -- --------- -
  -------------------
-
-- -------
-- -
-- -
-- -

在这个例子中,我们可以看到 Symbol.iterator 用于定义一个迭代器,该迭代器在对象被迭代时被调用。在这个迭代器函数中,我们使用 yield 关键字来创建连续的值,然后将其与对象关联起来。我们可以通过 for..of 循环来迭代对象。

Symbol.species

Symbol.species 用于定义方法返回的对象类型,例如:

-- -------------------- ---- -------
----- ------- -
  ------ --- ------------------ -
    ------ ------
  -
  ------------- -
    ------ --- ------------------------------------- -- ---
  -
-
----- -------------- ------- ------- -
  ------ --- ------------------ -
    ------ ---------------
  -
-
----- ------- - --- ----------
----- -------------- - --- -----------------
----- ------ - ----------------------
----- ------ - -----------------------------
------------------ ---------- --------- -- ----
------------------ ---------- ---------------- -- ----

在这个例子中,我们定义了一个基本类 MyClass 和一个派生类 MyDerivedClass。在 MyClass 中,我们使用 get 方法来定义 Symbol.species,使其返回 Array。在 MyDerivedClass 中,我们重新定义了 Symbol.species,使其返回 MyDerivedClass。通过这种方式,我们可以定义函数 createArray(),该函数将我们派生类的初始类型视为数组,并对其进行操作。

Symbol.match

Symbol.match 用于指定一个函数,该函数将在字符串被调用时用于匹配,例如:

在这个例子中,我们定义了一个类 MyMatcher,该类包含的 Symbol.match 方法在字符串中查找 'hello'。我们然后在两个字符串上调用 match() 函数,并使用给定的 MyMatcher 进行匹配。

结论

Symbol 是一个强大而有用的功能,可以让我们创建全局唯一的标识符,并在对象属性中存储它们。如果您在编写新的 ES6 代码,则应考虑使用 Symbol 来创建标识符,而不是使用字符串等其他类型,以确保属性键唯一性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6771ef746d66e0f9aad30244

纠错
反馈