ES6 的 Map 和 WeakMap 详解

阅读时长 7 分钟读完

Map

Map 是一种新的数据结构,它可以将任意类型的值作为键,所以它比 Object 更灵活。 Map 的初始化可以通过 Array 或者对象字面量进行初始化。

基本用法

Map 中有以下几个主要的方法:

set:

用来设置键值对,类型可以是任意类型。

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

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

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

get:

用来获取指定键的值。

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

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

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

has:

用来判断 Map 中是否有指定键。

size:

用来获取 Map 中所有键值对的数量。

delete:

用来删除指定键的值。

clear:

用来清空 Map。

遍历方法

Map 中可以使用以下几种方法进行遍历:

keys:

用来遍历 Map 中所有的键。

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

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

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

values:

用来遍历 Map 中所有的值。

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

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

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

entries:

用来遍历 Map 中所有的键值对。

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

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

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

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

forEach:

用来遍历 Map 中的所有键值对,可以传入一个回调函数。

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

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

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

WeakMap

WeakMap 是 Map 的一种变体,它的键只能是对象,并且只能使用 set、get、has、delete 方法。

WeakMap 有以下特点:

  1. WeakMap 中的键必须是对象,不能是原始类型或 null。

  2. WeakMap 中的键是弱引用,不会阻止 GC 对该对象的回收。

  3. WeakMap 中的键是不可枚举的,即不能使用 keys、values、forEach 等方法进行遍历。

基本用法

应用场景

WeakMap 通常用于存储 DOM 节点相关的数据,可以防止内存泄漏。比如下面的例子,我们可以用 WeakMap 存储一个节点的绑定事件,避免在节点被销毁时事件不能被释放从而导致内存泄漏。

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

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

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

总结

Map 和 WeakMap 是 ES6 中引入的新的数据结构。Map 可以存储任意类型的键值对, 并提供了丰富的遍历方法;WeakMap 只能存储对象类型的键值对, 但是它的键是弱引用,不会阻止 GC 执行垃圾回收, 避免了内存泄漏的问题。在实际应用中,我们可以根据具体场景选择使用 Map 或 WeakMap 数据结构。

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

纠错
反馈