ES6 中的 Symbol 数据类型及其应用场景

阅读时长 4 分钟读完

在 ES6 中,Symbol(符号)是一种全新的原始数据类型,与 Number、String、Boolean、Null 以及 Undefined 一样。它的主要作用就是为对象属性的键值提供了一种全新的方式,具有独特性而不会被意外的冲突所影响。

Symbol 的创建

创建一个 Symbol 的方式非常简单,我们可以使用全局的 Symbol() 函数进行创建。

Symbol 还可以接受一个可选的字符串参数,作为 Symbol 的描述。这个描述并不是字符串的值,而是让人类的阅读者更容易理解的实例标识符。

需要注意的是,即使你传入相同的字符串描述,每一个 Symbol 值都是唯一的。

Symbol 的应用场景

独特的属性名

Symbol 的主要作用是为每个对象创建一个新的属性键,以确保属性的唯一性。使用 Symbol 作为属性键可以避免属性名的冲突,特别是在混合了各种类型的属性名时更加实用。

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

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

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

模拟私有属性

在 JavaScript 中没有真正的私有属性,所有的属性都是公开的。但是在某些情况下,我们需要一些私有属性来避免外部的访问和修改。使用 Symbol 可以轻松地模拟出“私有属性”的效果。

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

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

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

枚举对象属性

Symbol 创建的属性不会出现在 for...in 循环中,也不会出现在 Object.keys() 方法返回的结果中。这使得 Symbol 属性可以用于对象属性的枚举。

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

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

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

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

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

总结

Symbol 是 ES6 中新增的一个数据类型,它主要用于表示唯一的属性键,可以用于避免属性名的冲突和模拟私有属性。Symbol 属性可以用于对象属性的枚举,但不会被 for...in 循环和 Object.keys() 方法枚举。

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

纠错
反馈