JavaScript 面试题
目录

JavaScript 中 WeakSet 和 WeakMap 的用法?

· 约 3 分钟读完 · 第 446 / 507 章

推荐答案

本题详细解读

WeakSet 的用法

  1. WeakSet 的特点:

    • WeakSet 是一种集合数据结构,类似于 Set,但它只能存储对象引用。
    • WeakSet 中的对象是弱引用,即如果对象没有被其他强引用指向,它会被垃圾回收机制自动回收。
    • WeakSet 没有 size 属性,也不能遍历其中的元素。
  2. WeakSet 的常用方法:

    • add(value):向 WeakSet 中添加一个对象。
    • delete(value):从 WeakSet 中删除一个对象。
    • has(value):检查 WeakSet 中是否包含某个对象。
  3. WeakSet 的使用场景:

    • 适用于存储临时对象,且不希望这些对象影响垃圾回收机制。
    • 例如,可以用来存储 DOM 元素的引用,当 DOM 元素被移除时,WeakSet 中的引用也会自动移除。

WeakMap 的用法

  1. WeakMap 的特点:

    • WeakMap 是一种键值对集合,类似于 Map,但它的键必须是对象。
    • WeakMap 中的键是弱引用,即如果键对象没有被其他强引用指向,它会被垃圾回收机制自动回收。
    • WeakMap 没有 size 属性,也不能遍历其中的键值对。
  2. WeakMap 的常用方法:

    • set(key, value):向 WeakMap 中添加一个键值对。
    • get(key):获取指定键对应的值。
    • delete(key):删除指定键的键值对。
    • has(key):检查 WeakMap 中是否包含某个键。
  3. WeakMap 的使用场景:

    • 适用于存储与对象相关的元数据,且不希望这些元数据影响垃圾回收机制。
    • 例如,可以用来存储 DOM 元素的附加信息,当 DOM 元素被移除时,WeakMap 中的键值对也会自动移除。

总结

  • WeakSet 和 WeakMap 都是弱引用的数据结构,适用于存储临时对象或与对象相关的元数据。
  • 它们的主要优势在于不会阻止垃圾回收机制回收对象,从而避免内存泄漏。
  • 由于它们不支持遍历和获取大小,因此适用于特定的场景,如存储临时数据或附加信息。