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。

相关推荐
其实防守也摸鱼20 分钟前
Codex破局:前端组件秒级生成的技术文章大纲
开发语言·前端·人工智能·学习·安全·web安全
奥莱维23 分钟前
KNX酒店方案_KNX专用线与高端酒店技术逻辑
java·服务器·前端·数据库
qq_4523962338 分钟前
第二篇:《前端架构的“道”与“术”:架构设计原则与决策框架》
前端·架构
lancyu1 小时前
# Agent Loop:AI Agent 的唯一直心骨
开发语言·javascript·人工智能
用户921080262861 小时前
AI 消息列表虚拟滚动:这是业务问题,还是组件能力边界?
前端
前端snow1 小时前
ai agent---mcp知识汇总
前端
计算机魔术师2 小时前
AI 写了一半代码,谁来背锅?Anthropic 的安全重构笔记
前端
半个落月2 小时前
JavaScript 单例模式详解:从唯一实例到按钮事件
javascript
明月_清风2 小时前
vLLM 深度实战:2026 年生产级 LLM 推理引擎完全指南
前端·后端·ai编程
风月说与山鬼2 小时前
七、uni-app页面与组件生命周期
前端·uni-app