在 JavaScript 中,对象是一种非常常见和强大的数据类型。但是在某些场景下,我们可能需要使用一些更高级的数据结构来存储和处理数据,比如 Map 和 WeakMap。在 ECMAScript 2021 中,这两个数据结构得到了增强,本文将介绍如何使用它们。
Map
Map 是一种键值对集合,其中每个键唯一,可以是任意类型的值,包括对象和函数。Map 对象内部采用哈希表的数据结构实现,因此查找和插入的时间复杂度都是 O(1)。
创建 Map
我们可以使用以下两种方式创建一个 Map:
// 通过构造函数创建 const map = new Map(); // 通过数组创建,数组元素为 [key, value] 的二元组 const map = new Map([ [key1, value1], [key2, value2] ]);
注意,由于 Map 的键可以是任意类型的值,因此可以使用对象、函数等复杂类型作为键。此外,由于 Map 对象是无序的,因此它不支持类数组对象,并且无法像数组那样使用 length 属性。
添加和删除元素
添加元素可以使用 set()
方法,删除元素可以使用 delete()
方法:
const map = new Map(); map.set(key1, value1); map.set(key2, value2); map.delete(key2);
获取元素
获取元素可以使用 get()
方法,如果元素不存在,返回 undefined:
const map = new Map(); map.set(key1, value1); console.log(map.get(key1)); // value1 console.log(map.get(key2)); // undefined
遍历 Map
Map 提供了以下四种遍历方式:
-- -------------------- ---- ------- ----- --- - --- ----- ------ -------- ------ -------- ------ ------- --- -- -------- ------ -- --- ------ ----- ------ -- ---- - ---------------- ------- - -- -------- --------- -- ------------------- ---- -- - ---------------- ------- --- -- ----------- --- ------ --- -- ----------- - ----------------- - -- ----------- --- ------ ----- -- ------------- - ------------------- -
WeakMap
WeakMap 也是一种键值对集合,但是它的键必须是对象。WeakMap 内部采用哈希表实现,但是键被弱引用,因此键所指向的对象在没有其他引用时,可能被垃圾回收器清除,这就是 WeakMap 名称的由来。
创建 WeakMap
我们可以使用以下方式创建一个 WeakMap:
const weakMap = new WeakMap();
添加和删除元素
WeakMap 只有 set()
和 get()
两个方法,无法遍历并删除元素。我们可以使用 delete()
方法删除元素:
const weakMap = new WeakMap(); const key = {a: 1}; const value = {b: 2}; weakMap.set(key, value); weakMap.delete(key);
注意事项
由于 WeakMap 的键是弱引用,因此要注意以下几点:
- 键必须是对象,不能是基本类型的值;
- 判断键是否存在的唯一方式是调用
get()
方法,并检查返回值是否为 undefined; - 不能使用 for-of 循环、forEach() 方法等方式遍历 WeakMap。
示例代码
下面是一个示例代码,展示了 Map 和 WeakMap 的用法:
-- -------------------- ---- ------- ----- ---- - --- --- ----- ------ - --- --- ----- ---- - --- --- ----- ------ - --- --- -- --- ----- --- - --- ------ ------------- -------- ------------- -------- --------------------------- -- --- -- --------------------------- -- ---- --- ------ ----- ------ -- ---- - ---------------- ------- - -- ------- ----- ------- - --- ---------- ----------------- -------- ----------------- -------- ------------------------------- -- --- -- ------------------------------- -- ---- ---------------------
总结
本文介绍了 ECMAScript 2021 中的 Map 和 WeakMap,它们可以用来存储和处理键值对数据,比普通对象更灵活、更高效。使用 Map 和 WeakMap 可以让我们在开发中更加便捷和高效,建议读者在实际开发中加以应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64bf6ce19e06631ab9bcc223