返回

Set 与 WeakSet:ES6无序集合的利器

前端

在软件开发过程中,我们经常使用数组Array这种引用类型的数据结构。数组是一种有序的集合,这意味着每个元素都可以使用数字下标的形式获取。但是,在一些业务场景中,我们并不需要集合维护一个有序的状态。此外,有时甚至需要一个无序的集合。因此,ES6 中引入了无序集合Set及其弱版本WeakSet。

Set
Set 是一种无序集合,这意味着它不维护元素的插入顺序。此外,Set 中的元素是唯一的,这意味着它不能包含重复的元素。

可以使用以下语法创建一个Set:

const mySet = new Set();

向Set中添加元素可以使用add()方法:

mySet.add(1);
mySet.add(2);
mySet.add(3);

从Set中删除元素可以使用delete()方法:

mySet.delete(2);

判断Set中是否包含某个元素可以使用has()方法:

mySet.has(2); // false

获取Set中元素的数量可以使用size属性:

mySet.size; // 2

WeakSet
WeakSet是一种特殊的Set,它只能包含对象。此外,WeakSet中的对象都是弱引用,这意味着当对象被垃圾回收时,它们会自动从WeakSet中移除。

可以使用以下语法创建一个WeakSet:

const myWeakSet = new WeakSet();

向WeakSet中添加对象可以使用add()方法:

myWeakSet.add(obj1);
myWeakSet.add(obj2);

从WeakSet中删除对象可以使用delete()方法:

myWeakSet.delete(obj1);

判断WeakSet中是否包含某个对象可以使用has()方法:

myWeakSet.has(obj1); // false

获取WeakSet中对象的数量可以使用size属性:

myWeakSet.size; // 1

Set和WeakSet的应用场景
Set 和 WeakSet 都可以在各种场景中使用。

  • Set 可以用于存储唯一的值,例如用户ID、产品ID等。
  • WeakSet 可以用于存储对象,例如DOM元素、事件监听器等。

Set 和 WeakSet 的主要区别在于,Set 中的元素是强引用,而 WeakSet 中的对象是弱引用。这意味着 Set 中的元素不会被垃圾回收,而 WeakSet 中的对象会在被垃圾回收时自动从 WeakSet 中移除。

结论
Set 和 WeakSet 是 ES6 中新增的两种无序集合数据结构。它们可以存储各种类型的值,并提供快速查找和插入的功能。Set 与 WeakSet 的主要区别在于,WeakSet 中的元素只能是对象,而 Set 中的元素可以是任何类型的值。此外,WeakSet 中的对象都是弱引用,这意味着当对象被垃圾回收时,它们会自动从 WeakSet 中移除。