ES6 中的数据结构 Map 和 WeakMap

阅读时长 4 分钟读完

JavaScript 中的线性数据结构包括数组和对象。但是有时候,我们需要使用非线性数据结构,例如哈希表和树等。ES6 中引入了新的数据结构 Map 和 WeakMap,方便我们操作非线性数据结构。本文将介绍 Map 和 WeakMap 的用法和特点,以及使用示例。

Map

Map 是一种键值对的集合,类似于对象,但是 Map 中的键和值类型不限于字符串。我们可以使用任意 JavaScript 类型作为键。这意味着像函数和对象等引用类型也可以作为键。

创建 Map

我们可以创建一个空 Map,然后使用 set 方法添加键值对。我们也可以在创建 Map 的时候就添加键值对:

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

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

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

使用 Map

Map 类提供了很多有用的方法,例如:

  • set(key, value):添加键值对
  • get(key):获取键对应的值
  • has(key):判断是否存在指定键
  • delete(key):删除指定键
  • clear():清空 Map
  • size:返回 Map 中键值对的数量
-- -------------------- ---- -------
----- --- - --- ------

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

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

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

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

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

遍历 Map

Map 中的键值对是有序的,我们可以使用 for...of 循环遍历 Map,也可以使用 forEach 方法。Map 也可以转化为数组或对象。

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

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

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

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

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

WeakMap

WeakMap 与 Map 类似,都是键值对的集合。不同的是,WeakMap 的键只能是对象类型,而且这些对象是弱引用的。也就是说,当某个对象作为键被清空时,其对应的值也会被自动清除。

因为 WeakMap 中的键是弱引用,如果某个键所引用的对象仅存在于 WeakMap 中,那么垃圾回收机制可能会将其清空。因此,我们不能直接访问 WeakMap 中存储的键值对。

创建 WeakMap

我们可以使用 new WeakMap() 创建一个新的 WeakMap。

使用 WeakMap

WeakMap 中提供的方法和 Map 类似,不同的是,它不能使用 forEach 方法和 clear() 方法。

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

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

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

总结

本文介绍了 ES6 中新增加的非线性数据结构 Map 和 WeakMap,它们的特点和用法。Map 可以使用任意类型的键,而 WeakMap 的键只能是对象类型。使用这些新的数据结构,我们可以更轻松地操作非线性数据结构。

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

纠错
反馈