Map 和 WeakMap

Map 和 WeakMap 都是 ES6 中新增的数据结构,它们的主要区别在于键的作用域和键的类型。

键的作用域

Map 的键的作用域是全局的,也就是说,Map 中的键不会被污染,也不会对其他的变量产生影响。而 WeakMap 的键的作用域是局部的,也就是说,WeakMap 中的键只在定义它的函数作用域内有效,一旦函数执行完毕,WeakMap 中的键就会被释放。

键的类型

Map 的键可以是任意类型的值,包括对象、数组、函数等等。而 WeakMap 的键只能是对象,因为 WeakMap 是通过引用计数来管理键的,如果键不是对象,就无法计数。

下面是一个使用 Map 和 WeakMap 的示例代码:

javascript 复制代码
// 使用 Map 存储数据
const map = new Map();
map.set("a", 1);
map.set("b", 2);
map.set("c", 3);

// 使用 WeakMap 存储数据
const weakMap = new WeakMap();
const obj1 = {};
const obj2 = {};
weakMap.set(obj1, 1);
weakMap.set(obj2, 2);
weakMap.set(obj1, 3);

console.log(map.get("a")); // 1
console.log(map.get("b")); // 2
console.log(map.get("c")); // 3

console.log(weakMap.get(obj1)); // 3
console.log(weakMap.get(obj2)); // 2

键的可枚举性

Map对象不同的是,WeakMap的键是不可枚举的。不提供列出其键的方法。列表是否存在取决于垃圾回收器的状态,是不可预知的。

总结

如果有需要遍历键值对的需求,则需要使用 Map。

相关推荐
崔庆才丨静觅5 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60615 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了5 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅6 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅6 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅6 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment6 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅7 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊7 小时前
jwt介绍
前端
爱敲代码的小鱼7 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax