WeakMap & Map

WeakMap & Map
BreezliWeakMap & Map
核心区别在于键类型、内存管理及可遍历性:
- 键类型限制:WeakMap 仅接受对象作为键(非对象如字符串、Symbol会报错),而Map支持任意类型键值。
- 弱引用机制:WeakMap的键是弱引用,若键对象无其他强引用,垃圾回收时自动清除对应条目,避免内存泄漏;Map强引用键,即使对象不再使用,仍保留条目导致内存无法释放。
- 可遍历性:WeakMap不可遍历(无
size
、keys()
等方法),Map支持迭代器访问所有条目。 - API差异:WeakMap仅有
get
、set
、has
、delete
方法,Map额外提供clear
、forEach
及迭代接口。
应用场景对比:
- WeakMap:适合关联对象与元数据且无需手动清理(如DOM元素绑定事件处理器,元素移除后自动释放)。
- Map:需长期维护键值对或遍历操作的场景(如缓存数据、频率统计)。
示例:
1 | // WeakMap:键为对象,自动清理 |
内存泄漏对比:
1 | // Map导致内存泄漏 |
WeakMap用于管理短期或临时状态,以及避免潜在的内存泄漏问题,适用于临时关联 生命周期与键对象绑定、缓存、模拟私有属性 的场景