← [ BACK_TO_NOTES ]

Map vs WeakMap

Map 和 WeakMap 的设计目标、引用强弱、遍历能力和使用场景对比。

#synthesis #growing #javascript #ecmascript

[!info] related notes

Map vs WeakMap

主题范围

这篇笔记只对比 Map 和 WeakMap 的设计目标、引用语义、可遍历性和典型用途。

一句话结论

  • Map:通用键值对容器,适合做字典、缓存、统计
  • WeakMap:对象元数据容器,适合给对象挂私有数据且不妨碍回收

对比表

维度MapWeakMap
键类型任意类型只能对象
引用语义强引用弱引用
是否可遍历可以不可以
是否有 size有没有
适合做通用字典是否
适合对象私有数据可以,但要注意内存更适合

为什么 WeakMap 不能遍历

因为 WeakMap 的键可能在任意时刻被垃圾回收,遍历结果不稳定,所以它故意不提供 keys()、values()、entries() 和 forEach()。

什么时候用 Map

  • 键值对需要遍历
  • 键可能是任意类型
  • 需要统计数量
  • 频繁增删

什么时候用 WeakMap

  • 键必须是对象
  • 想给对象附加隐藏数据
  • 不想因为缓存导致对象无法回收

最短记忆方式

  • Map = 通用字典
  • WeakMap = 对象附属数据
创建于 2026/4/7 更新于 2026/7/15
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本