ECMAScript 2017 (ES8): JavaScript Map/Set/WeakMap/WeakSet 数据结构初探

阅读时长 8 分钟读完

JavaScript 是一种动态语言,它可以通过对象字面量来创建对象,但在某些情况下,使用 Map/Set/WeakMap/WeakSet 数据结构会更加高效和便捷。这些数据结构都是 ES6 引入的,而在 ES8 中,它们都得到了进一步的改进和完善。

Map

Map 是一种以键值对形式存储数据的数据结构,其中键和值可以是任意类型的数据。Map 中的键是唯一的,而值则可以重复。Map 提供了一些常用的方法,如 set、get、has、delete 和 clear 等。

创建 Map

可以使用 Map 构造函数来创建一个空的 Map 对象:

也可以在创建时添加键值对:

Map 方法

set

set 方法用于向 Map 中添加键值对:

get

get 方法用于获取指定键的值:

has

has 方法用于判断是否存在指定键:

delete

delete 方法用于删除指定键值对:

clear

clear 方法用于清空 Map 中的所有键值对:

Map 遍历

Map 提供了三种遍历方法:keys、values 和 entries。其中,keys 方法返回 Map 中所有键的迭代器,values 方法返回 Map 中所有值的迭代器,而 entries 方法返回 Map 中所有键值对的迭代器。

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

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

--- ------ ----- ------ -- -------------- -
  -------------------- -----------
-
展开代码

Set

Set 是一种不重复的数据集合,其中的元素可以是任意类型的数据。Set 提供了一些常用的方法,如 add、has、delete 和 clear 等。

创建 Set

可以使用 Set 构造函数来创建一个空的 Set 对象:

也可以在创建时添加元素:

Set 方法

add

add 方法用于向 Set 中添加元素:

has

has 方法用于判断 Set 中是否存在指定元素:

delete

delete 方法用于删除指定元素:

clear

clear 方法用于清空 Set 中的所有元素:

Set 遍历

Set 提供了三种遍历方法:keys、values 和 entries。其中,keys 方法返回 Set 中所有元素的迭代器,values 方法返回 Set 中所有元素的迭代器,而 entries 方法返回 Set 中所有元素的迭代器(因为 Set 中的元素没有键,所以 entries 方法返回的是 [value, value] 数组)。

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

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

--- ------ ----- ------ -- -------------- -
  -------------------- -----------
-
展开代码

WeakMap

WeakMap 与 Map 类似,也是一种以键值对形式存储数据的数据结构,但其中的键必须是对象,而值可以是任意类型的数据。WeakMap 中的键是弱引用的,即当键对象被垃圾回收时,与之关联的键值对也会自动被删除。WeakMap 提供了一些常用的方法,如 set、get、has 和 delete 等。

创建 WeakMap

可以使用 WeakMap 构造函数来创建一个空的 WeakMap 对象:

也可以在创建时添加键值对:

WeakMap 方法

set

set 方法用于向 WeakMap 中添加键值对:

get

get 方法用于获取指定键的值:

has

has 方法用于判断是否存在指定键:

delete

delete 方法用于删除指定键值对:

WeakMap 的应用

WeakMap 的一个常见应用是用于存储对象的私有属性,因为这些属性只能通过对象本身来访问,而外部代码无法访问。

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

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

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

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

----- --- - --- ----------
----------------------------------- -- -- ------
------------------------ ---------
----------------------------------- -- -- --- ------
展开代码

WeakSet

WeakSet 与 Set 类似,也是一种不重复的数据集合,但其中的元素必须是对象。WeakSet 中的元素是弱引用的,即当元素对象被垃圾回收时,该元素也会自动被删除。WeakSet 提供了一些常用的方法,如 add、has 和 delete 等。

创建 WeakSet

可以使用 WeakSet 构造函数来创建一个空的 WeakSet 对象:

也可以在创建时添加元素:

WeakSet 方法

add

add 方法用于向 WeakSet 中添加元素:

has

has 方法用于判断 WeakSet 中是否存在指定元素:

delete

delete 方法用于删除指定元素:

WeakSet 的应用

WeakSet 的一个常见应用是用于存储对象的标记,例如用于判断某个对象是否已经被处理过。

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

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

  -- ----

  ----------------------
-
展开代码

总结

Map/Set/WeakMap/WeakSet 数据结构是 JavaScript 中非常常用的数据结构,它们可以帮助我们更加高效和便捷地存储和处理数据。在使用这些数据结构时,需要注意它们的特点和使用方法,以充分发挥它们的优势。

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

纠错
反馈

纠错反馈