ES6 中的 Map 和 WeakMap 使用详解

阅读时长 5 分钟读完

简介

在 ES6 中,引入了 Map 和 WeakMap 两个新的集合类型。Map 可以将任何类型的值作为键,而 WeakMap 只能将对象作为键,且对于键所引用对象的引用不会阻碍垃圾回收程序回收这些对象。本文将详细介绍 Map 和 WeakMap 的使用以及它们之间的差异。

Map 的使用

创建 Map

可以通过如下方式创建 Map:

也可以通过数组初始化 Map:

这样创建的 Map 对象中,键名 foo 指向字符串 'bar',键名 baz 指向数值 42。

Map 方法

Map 对象提供了一些方法,如下所示:

  • set(key, value):设置键名对应的值。
  • get(key):获取键名对应的值,如果不存在则返回 undefined。
  • has(key):返回一个布尔值,表示键名是否存在。
  • delete(key):删除指定键名对应的键值对。
  • clear():清除所有键名。
-- -------------------- ---- -------
----- --- - --- ------
-------------- -------
-------------- ----

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

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

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

Map 遍历

Map 提供了一些方法来遍历其键值对,如下所示:

  • keys():返回键名的遍历器。
  • values():返回键值的遍历器。
  • entries():返回键值对的遍历器,在遍历时返回一个包含键名和键值的数组。
  • forEach(callbackFunc):遍历 Map,对于每个键值对都执行指定的回调函数。
-- -------------------- ---- -------
----- --- - --- ------------ ------- ------- ------
--- ------ --- -- ----------- -
  ----------------- -- ------ -----
-
--- ------ ----- -- ------------- -
  ------------------- -- ------ --
-
--- ------ ----- ------ -- -------------- -
  ---------------- ------- -- ----- ------ ----- --
-
------------------- ---- -- ---------------- -------- -- ----- ------ ----- --

Map 应用

Map 可以用于任何需要键值对集合的场景,例如:

  • 缓存数据
  • 替代对象字面量
  • 字符串映射

WeakMap 的使用

WeakMap 与 Map 功能类似,但有一个显著的不同点:WeakMap 中的键只能是对象,并且不会增加这些对象的引用计数。这意味着如果这些对象在其他地方没有其它引用,它们会被自动回收。WeakMap 也没有 forEach 方法。

创建 WeakMap

可以通过如下方式创建 WeakMap:

无法通过数组初始化 WeakMap。

WeakMap 方法

WeakMap 提供的方法只有 set、get、has 和 delete,与 Map 方法类似。但需要注意的是,只有对象键才能使用这些方法。

WeakMap 的应用

WeakMap 的主要应用场景是实现私有属性,例如:

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

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

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

总结

本文对 ES6 中的 Map 和 WeakMap 进行了详细的介绍,包括创建、方法、遍历以及应用。在实际开发中,应根据具体场景来选择使用 Map 或 WeakMap,并善于运用它们来提高代码的可读性、可维护性和性能。

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

纠错
反馈