在前端开发中,处理数据集合时常常使用数组、对象等数据结构。然而,在某些情况下,这些结构并不足够灵活,比如需要进行键值对的存取时,就会显得有些力不从心。这时候,就需要用到 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
const map1 = new Map([["key1", "value1"]]); // 使用 Map 构造函数 const map2 = new Map(map1); // 使用 spread 运算符 const map3 = new Map([...map1]);
上述代码中,使用了 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