WeakSet 和 Set 的区别是什么?

推荐答案

  • Set 是一种集合数据结构,允许存储任何类型的唯一值,无论是原始值还是对象引用。Set 中的值是无序的,且每个值只能出现一次。
  • WeakSet 是一种特殊的集合,只能存储对象引用,且这些引用是弱引用。WeakSet 中的对象是弱持有的,意味着如果没有其他引用指向该对象,它会被垃圾回收机制自动回收。

本题详细解读

Set 的特点

  1. 存储类型:Set 可以存储任何类型的值,包括原始值(如字符串、数字等)和对象引用。
  2. 唯一性:Set 中的值是唯一的,重复的值会被自动忽略。
  3. 强引用:Set 中的值是通过强引用持有的,即使没有其他引用指向该值,它也不会被垃圾回收。
  4. 可迭代:Set 是可迭代的,可以使用 for...of 循环或 forEach 方法遍历其中的值。
  5. 大小:可以通过 size 属性获取 Set 中元素的数量。

WeakSet 的特点

  1. 存储类型:WeakSet 只能存储对象引用,不能存储原始值。
  2. 弱引用:WeakSet 中的对象是弱持有的,如果没有其他引用指向该对象,它会被垃圾回收机制自动回收。
  3. 不可迭代:WeakSet 不可迭代,没有 forEach 方法,也不能直接获取其大小。
  4. 用途:WeakSet 通常用于存储对象的临时引用,避免内存泄漏。

使用场景

  • Set:适用于需要存储唯一值的场景,如去重、集合运算等。
  • WeakSet:适用于需要临时存储对象引用且不希望影响垃圾回收的场景,如缓存、事件监听器等。

示例代码

-- -------------------- ---- -------
-- --- --
----- --- - --- ------
-----------
-----------------
------------ -- ------
---------------------- -- -

-- ------- --
----- ------- - --- ----------
----- --- - ---
-----------------
-- --------------- -- ---------- ------
------------------------------ -- ----

通过以上对比,可以清晰地看出 Set 和 WeakSet 的主要区别在于存储类型、引用强度以及是否可迭代等方面。

上一篇: 什么是 WeakSet?
下一篇: 什么是 WeakMap?
纠错
反馈