ECMAScript 2019 中你应该知道的 Symbol 与 Symbol 对象

ECMAScript 2019 中你应该知道的 Symbol 与 Symbol 对象

在 ECMAScript 2019 中, Symbol 成为了一项新的特性,虽然 Symbol 的概念在 ES6 中就已经出现了,但它在 ES2019 中的更新彰显了其重要性。通过了解 Symbol 的使用方法以及 Symbol 对象,你可以更好地理解其在现代 JavaScript 开发中的威力。

Symbol 的定义

Symbol 是 ECMAScript 2015 引入的新的基本数据类型,它与其他基本数据类型不同,表示一个独一无二的值。Symbol 类型的定义及创建方式如下:

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

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

Symbol 可以被用作属性键,在对象字面量中使用 Symbol 作为键名时,需要使用 [ ] 操作符。Symbol 作为属性键具有唯一性,不会与其他属性冲突。如下所示:

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

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

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

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

使用 Symbol 作为属性键时,属性名不可枚举,也就是不能被 for...in 循环获取到。如果需要获取 Symbol 属性,需要使用 Object.getOwnPropertySymbols() 方法。示例代码如下:

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

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

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

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

Symbol.for() 和 Symbol.keyFor()

Symbol.for() 方法和 Symbol.keyFor() 方法的功能比较相似,都是可用于对 Symbol 进行全局注册和检索。

Symbol.for() 方法可以将 Symbol 注册到全局 Symbol 注册表中,如果该 Symbol 已经在注册表中出现过,会直接返回它。示例代码如下:

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

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

Symbol.keyFor() 方法用于获取全局 Symbol 注册表中与 Symbol 有关的键名,如果没有找到该 Symbol,则返回 undefined。示例代码如下:

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

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

Symbol 方法

在 Symbol 对象中,定义了一些方便操作 Symbol 的方法。

Symbol.hasInstance:该方法在检查某个对象是否是类的实例时被调用。

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

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

Symbol.isConcatSpreadable:用于确定对象是否可扩展到 array 中。

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

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

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

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

Symbol.match:用于确定一个输入字符串是否与正则表达式匹配。

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

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

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

Symbol.toPrimitive:用于转换对象为基本类型值。

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

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

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

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

Symbol.toStringTag:用于返回对象的字符串表示。

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

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

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

结论

通过了解 Symbol 与 Symbol 对象,我们可以更好地理解其在现代 JavaScript 开发中的重要性。Symbol 可以用作属性键名,保证属性的唯一性,可以通过 Symbol.for() 方法实现 Symbols 的全局注册,并且 Symbol 对象还定义了一些方便操作 Symbol 的方法。希望本文可以为你提供 Symbol 的一些学习及指导意义。

参考链接:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol

https://segmentfault.com/a/1190000023046329

https://juejin.cn/post/6844904114372126733

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