如何恰当的使用 ES6 中的 Map 和 WeakMap

阅读时长 5 分钟读完

在 ES6 中, MapWeakMap 是两个非常有用的集合类型。 Map 是一个键值对的集合,其中键可以是任何类型,而值则可以是任何类型的值。 WeakMapMap 类似,但是它只接受对象作为键,并且键被保存为弱引用。这意味着如果一个键不再被引用,它将被垃圾回收。在这篇文章中,我们将学习如何恰当地使用 MapWeakMap

使用 Map

创建 Map

创建一个空的 Map 很简单,只需要使用 new Map() 即可。

Map 还可以接受一个可迭代对象,例如一个数组,在其创建时初始化键值对。

如果试图使用相同的键多次在 Map 中设置一个值,将会覆盖之前的值。这是因为在 Map 中,每个键都是唯一的。

获取 Map 中的值

获取 Map 中的值很简单,只需要使用 get() 方法并传递一个键。

判断 Map 中是否存在特定的键

我们可以使用 has() 方法来检查 Map 中是否存在一个键。

删除 Map 中的键值对

我们可以使用 delete() 方法删除 Map 中的键值对。

遍历 Map 中的键值对

遍历 Map 中的键值对有多种方法。可以使用 forEach()for-of 循环以及迭代器。下面是一些示例:

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

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

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

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

使用 WeakMap

创建 WeakMap

创建一个空的 WeakMap 很简单,只需要使用 new WeakMap() 即可。

设置和获取键值对

WeakMap 中,只有对象可以作为键,否则会出现语法错误。使用 set()get() 方法设置和获取键值对。

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

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

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

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

判断是否存在键

我们可以使用 has() 方法来检查 WeakMap 中是否存在一个键。

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

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

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

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

删除键值对

Map 相似,我们可以使用 delete() 方法删除 WeakMap 中的键值对。

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

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

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

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

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

总结

使用 MapWeakMap 可以方便地存储键值对。在使用 Map 时,请记住,每个键都是唯一的,因此将相同的键多次设置为不同的值将覆盖之前的值。在使用 WeakMap 时,请记住,只有对象才能作为键,并且键被保存为弱引用,因此如果一个键不再被引用,它将被垃圾回收。

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

纠错
反馈