ECMAScript 2021 (ES12) 中 Symbol 的使用方法

在 ECMAScript 2015(ES6)中,Symbol 是一种新的原始数据类型,它可以用来创建唯一的标识符,从而避免名称冲突。在 ECMAScript 2021(ES12)中,Symbol 有了更多的用途和扩展,本文将介绍 Symbol 的使用方法和示例代码。

创建 Symbol

创建 Symbol 可以使用全局的 Symbol 函数,它可以接受一个可选的参数,用于描述 Symbol,这个描述只是一个字符串,用于调试和诊断。

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

上面的代码创建了两个不同的 Symbol,第二个 Symbol 有一个描述。

Symbol 作为对象属性名

Symbol 可以作为对象的属性名,这样可以避免属性名冲突。使用 Symbol 作为属性名时,需要使用方括号语法。

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

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

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

上面的代码创建了一个对象,并使用 Symbol 作为属性名,然后设置了属性值。使用方括号语法获取属性值时,也需要使用 Symbol。

内置 Symbol

ES6 中有一些内置的 Symbol,比如 Symbol.iterator,用于指定对象的默认迭代器。ES12 中新增了一些内置的 Symbol。

Symbol.matchAll

Symbol.matchAll 用于指定一个正则表达式的全局匹配器,它返回一个迭代器,可以迭代出所有匹配结果。

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

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

上面的代码使用 Symbol.matchAll 获取字符串中所有的 l。

Symbol.asyncIterator

Symbol.asyncIterator 用于指定对象的异步迭代器,它返回一个异步迭代器,可以迭代出所有的异步结果。

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

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

上面的代码创建了一个异步可迭代对象,并使用 Symbol.asyncIterator 指定了异步迭代器。然后使用 for await...of 循环异步迭代对象。

Symbol.hasInstance

Symbol.hasInstance 用于指定一个函数的 instanceof 运算符行为。它接受一个参数,表示被检查的对象。

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

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

上面的代码创建了一个类,并使用 Symbol.hasInstance 指定了 instanceof 运算符行为。

Symbol 属性描述符

ES6 中有一些属性描述符,比如 writable、enumerable、configurable 等。ES12 中新增了一些属性描述符,用于 Symbol 属性。

Symbol.toStringTag

Symbol.toStringTag 用于指定一个对象的 toString 方法返回的字符串。

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

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

上面的代码创建了一个类,并使用 Symbol.toStringTag 指定了 toString 方法返回的字符串。

Symbol.unscopables

Symbol.unscopables 用于指定一个对象的 with 语句中被排除的属性。

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

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

上面的代码创建了一个对象,并使用 Symbol.unscopables 指定了 with 语句中被排除的属性。

总结

Symbol 是一种新的原始数据类型,它可以用来创建唯一的标识符,避免名称冲突。ES12 中 Symbol 有了更多的用途和扩展,比如作为对象属性名、内置 Symbol、Symbol 属性描述符等。使用 Symbol 可以让代码更加简洁和可读。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65d5cf91add4f0e0ffd76318