ES6 中的 Set 和 WeakSet 差别及使用场景

阅读时长 4 分钟读完

在 JavaScript 的新标准 ES6 中,引入了 Set 和 WeakSet 两种新的集合类型,它们可以方便地存储不重复的数据。本文将会介绍这两个集合类型的区别,并提供使用场景和示例代码。

Set

Set 是 ES6 中的一个新的数据结构,它类似于数组,但是可以存储不重复的数据。Set 实例化后包含一个内部数据结构,可以通过 add() 方法添加元素,使用 delete() 方法删除元素,通过 has() 方法判断是否包含某个元素,使用 size 属性获取元素数量,或者通过 forEach() 方法遍历集合中的元素。

下面是一个简单的 Set 使用示例:

WeakSet

WeakSet 也是 ES6 中的一个新的数据结构,它与 Set 类似,但有以下不同:

  • WeakSet 中只能存储对象,不能存储原始值;
  • WeakSet 中存储的对象只能是弱引用,即当对象没有被其他变量或对象引用时,可以被垃圾回收器回收;
  • WeakSet 没有 size 属性,无法获得元素数量,也不能遍历其中的元素。

下面是一个简单的 WeakSet 使用示例:

使用场景

Set 和 WeakSet 适用于不同的场景,下面列举一些常见的使用场景。

Set 的使用场景

  • 去重复 - Set 能够自动排除重复的数据,适用于对数据进行去重的场景;
  • 数组去重 - 将原数组放入 Set 中,然后再将 Set 转换回数组,这是一种较为简洁的数组去重方法;
  • 判断值是否存在 - 使用 Set 中的 has() 方法判断某个值是否存在;
  • 遍历 - 使用 Set 中的 forEach() 方法遍历 Set 中的元素。
-- -------------------- ---- -------
-- ----
----- --- - --- -- -- -- -- ---
----- --------------- - ------- ---------- -- --- -- -- --

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

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

WeakSet 的使用场景

  • 存储不重复的对象 - 由于 WeakSet 只能存储对象,且存储的对象只能是弱引用,适用于存储一些只在某些情况下存在的对象,例如缓存等。
-- -------------------- ---- -------
----- ----- - --- ----------
-------- --------------------- -
  -- ------------------ -
    ------ -----------------
  - ---- -
    ----- --------- - --------- --------------
    ---------------- -----------
    ------ ----------
  -
-

总结

Set 和 WeakSet 都是 ES6 中的新数据结构,它们都能存储不重复的数据,但是 WeakSet 中只能存储对象,并且存储的对象只有在弱引用仍在被其他变量或对象引用时才存在。根据不同的使用场景,我们可以判断选择使用 Set 还是 WeakSet,以提高代码的可读性和效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64dee552f6b2d6eab3a0b011

纠错
反馈