📅  最后修改于: 2023-12-03 14:42:30.104000             🧑  作者: Mango
在 JavaScript 中,Map 和 WeakMap 都是用来存储键值对的集合,但是它们有很大的区别。下面我们来详细介绍一下它们的区别。
Map 是一个简单的键值对集合,其中键可以是任意类型,而值也可以是任意类型。下面是 Map 的基本使用方法:
const map = new Map();
// 添加键值对
map.set('name', 'John');
map.set('age', 30);
// 获取值
console.log(map.get('name')); // 输出 "John"
console.log(map.get('age')); // 输出 30
// 判断是否存在某个键
console.log(map.has('name')); // 输出 true
// 删除某个键值对
map.delete('name');
console.log(map.has('name')); // 输出 false
// 获取键值对数量
console.log(map.size); // 输出 1
WeakMap 和 Map 类似,也是一个键值对集合,但是它有如下特点:
下面是 WeakMap 的基本使用方法:
const wm = new WeakMap();
// 添加键值对
const obj = {};
wm.set(obj, 'value');
// 获取值
console.log(wm.get(obj)); // 输出 "value"
// 判断是否存在某个键
console.log(wm.has(obj)); // 输出 true
// 删除某个键值对(键被自动垃圾回收)
wm.delete(obj);
console.log(wm.has(obj)); // 输出 false
Map 和 WeakMap 都是用来存储键值对的集合,但是它们的本质区别在于:
因此,如果你需要存储任意类型的键值对,而且不需要自动垃圾回收的功能,可以使用 Map;如果你需要存储对象类型的键值对,而且希望键在不被引用时自动被垃圾回收,可以使用 WeakMap。