WeakMap 是键必须为对象且不阻止垃圾回收的弱引用集合,用于避免内存泄漏、存储私有元数据;它无 size、不可遍历、不可清空,适用于对象生命周期即数据生命周期的场景。

WeakMap 是 JavaScript 中一种特殊的键值对集合,它的核心特点是:键必须是对象,且对这个键的引用是“弱”的——也就是说,它不会阻止垃圾回收器回收该对象。
WeakMap 用来避免内存泄漏
普通 Map 会对键保持强引用。如果一个 DOM 节点只被 Map 引用,即使它已从页面中移除,也仍驻留在内存里,造成泄漏。WeakMap 没这个问题:
- 当 DOM 节点被移除,且没有其他变量引用它时,它和 WeakMap 中对应的键值对会一起被自动清理
- 适合长期运行的网页应用,尤其是频繁增删节点的场景(如单页应用、列表滚动、动态表单)
WeakMap 适合存储私有或临时元数据
它天然隔离数据,不暴露在对象自身上,也不参与遍历或序列化:
- 为类实例添加真正私有的状态(比如密码、配置、内部缓存),外部无法通过
Object.keys()或for...in访问 - 给 DOM 节点附加状态标记(如“是否已初始化”“上次点击时间”),而不污染节点属性
- 缓存耗时计算结果,比如
getBoundingClientRect()或样式推导,对象一销毁,缓存自动失效
WeakMap 的使用限制就是它的保护机制
它故意不提供某些能力,来确保弱引用语义不被破坏:
1、什么是店中店?店中店是全诚商多用户版的一大特色,它既是独立的个体,又具有群集功能。我们做个例子说明:假设尊贵的您现实生活中租赁了一个店面,店面空间很大,您可以把您的店面分割成很多独立空间再向别人转租,这样您可以额外获得一部分租赁费用收入,借以减少你的个人租赁费用投入,还能起到活跃销售场所的气氛,俗话说:货卖一堆吗。你租赁的店面可以完全分割成很多空间向外转租,也可以自己保留一块空间为自己销售商品
立即学习“Java免费学习笔记(深入)”;
- 没有
.size属性,无法知道存了多少条 - 不能遍历:没有
.keys()、.values()、.entries()或.forEach() - 键只能是对象(null、字符串、数字等原始类型会报错)
- 无法清空:没有
.clear()方法,只能靠对象自然回收
基本上就这些。它不是通用替代品,而是在“对象生命周期即数据生命周期”的场景下,最干净的解决方案。









