ES8 中 Map 和 WeakMap 方法的应用

阅读时长 5 分钟读完

在前端开发中,处理数据集合时常常使用数组、对象等数据结构。然而,在某些情况下,这些结构并不足够灵活,比如需要进行键值对的存取时,就会显得有些力不从心。这时候,就需要用到 ES8 中引入的 Map 和 WeakMap 方法。

Map 和 WeakMap 方法的介绍

Map 和 WeakMap 是内置对象,用于存储键值对。

Map 和 WeakMap 的共同点是:

  • 他们都有 set、get、has、delete 等方法;
  • 他们的键可以是任意类型,包括对象、基本数据类型等等。

不同之处在于:

  • Map 的键是强引用,不会被垃圾回收器回收;
  • WeakMap 的键是弱引用,会被垃圾回收器回收。

Map 方法的应用

Map 方法的使用和 Object 类型类似,下面是一些常用的方法:

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

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

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

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

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

上述代码中,使用了 set 方法添加了两个键值对,使用 get 方法获取了一个键值对的值,使用了 has 方法判断一个键是否存在,使用了 delete 方法删除了一个键值对。

在处理数据集合时,Map 可以方便地进行遍历、拷贝等操作,下面是一些更高级的使用方法。

遍历 Map

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

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

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

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

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

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

上述代码中,使用了 Map 的 keys、values、entries 和 forEach 方法遍历了 Map。

拷贝 Map

上述代码中,使用了 Map 的构造函数和 spread 运算符拷贝了一个 Map。

WeakMap 方法的应用

WeakMap 方法是 Map 的一种特殊形式,它的键是弱引用,这意味着当键对象被垃圾回收器回收时,对应的键值对也会被自动删除。

WeakMap 的使用和 Map 类似,下面是一些常用的方法:

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

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

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

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

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

上述代码中,使用了 set 方法添加了一个键值对,使用 get 方法获取了一个键值对的值,使用了 has 方法判断一个键是否存在,使用了 delete 方法删除了一个键值对。

WeakMap 的应用场景一般是在需要存储对象的私有属性时使用,下面是一个示例:

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

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

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

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

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

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

上述代码中,使用了 WeakMap 存储了对象的私有属性,并使用了 get 方法获取了对应的属性值。由于 WeakMap 的键是弱引用,即使对象被回收,私有属性也不会被泄露。

总结

ES8 中的 Map 和 WeakMap 方法是一种更加灵活、功能更加强大的数据存储方式,可以方便地进行遍历、拷贝等操作,并且在处理对象的私有属性时也有着很好的响应方案。在实际开发中,可以充分利用这些方法来提高代码的效率和可读性。

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

纠错
反馈