在 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