WeakMap 和 WeakSet 的核心特点是持有弱引用,不阻止垃圾回收;WeakMap 键必须为对象、仅支持 get/set/has/delete,适用于为第三方对象添加私有元数据或对象级缓存;WeakSet 仅存储对象、仅支持 add/has/delete,适用于存在性标记或防重复操作;二者均不可遍历、无 size、不能用基本类型,不适合长期缓存或主数据结构。
WeakMap 和 WeakSet 的核心特点是:它们持有的引用是“弱引用”,即不阻止垃圾回收机制回收所关联的对象。一旦对象在其他地方不再被强引用,即使它还在 WeakMap 或 WeakSet 中,也会被自动移除。
WeakMap 的键(key)必须是对象,且对这个对象的引用是弱引用;值(value)可以是任意类型。它不支持遍历、没有 size 属性、也没有 clear() 方法,只能通过 get、set、has、delete 操作。
存泄漏——比如监听器回调中引用了外部对象,用 WeakMap 关联可确保对象销毁后缓存自动失效WeakSet 只能存储对象,且同样使用弱引用。它也不可迭代、没有 size,只提供 add、has、delete 方法。
不能用于需要稳定长期持有引用的场景:
本质上,WeakMap 和 WeakSet 是 JS 提供的轻量级、生命周期感知的辅助结构,不是功能替代品,而是内存友好型的补充工具。