ES6 中的 Set 和 WeakSet 的使用详解

ES6 引入了两种新的集合类型 Set 和 WeakSet,它们比传统的数组和对象更加强大和灵活。本文将详细介绍 Set 和 WeakSet 的使用,并提供一些示例代码,帮助读者更好地理解它们的用途和使用方法。

Set

Set 是 ES6 中一种新的集合类型,它类似于数组但是成员唯一且无序。Set 中的成员可以是任何类型的值。通过 Set 可以方便地去重,判断一个元素是否存在于集合中,对两个集合求并集、交集、差集等操作。

创建 Set

使用 Set 的构造函数可以创建一个空的 Set 实例:

const set = new Set();

如果希望在创建时就向 Set 中添加元素,可以把要添加的元素作为参数传入构造函数:

const set = new Set([1, 2, 3]);

Set 属性和方法

Set 实例具有以下常用属性和方法:

  • size:返回 Set 中元素的数量。
  • add(value):向 Set 中添加元素,如果元素已经存在则不会重复添加。
  • delete(value):从 Set 中删除指定元素,如果元素不存在则不会报错。
  • has(value):判断 Set 中是否包含指定元素。返回值为布尔类型。
  • clear():清空 Set 中的所有元素。

Set 示例

// 创建 Set 实例
const set = new Set([1, 2, 3]);

// 判断元素是否存在
set.has(2); // true
set.has(4); // false

// 添加元素
set.add(4); // Set { 1, 2, 3, 4 }
set.add(4); // Set { 1, 2, 3, 4 },元素不会重复添加

// 删除元素
set.delete(4); // true
set.delete(4); // false

// 清空 Set
set.clear(); // Set {}

WeakSet

WeakSet 和 Set 类似,也是一种集合类型,但是它只能存储对象类型的成员,而且它的成员是弱引用,不会影响对象的垃圾回收。WeakSet 中的成员也是唯一且无序的。

创建 WeakSet

使用 WeakSet 的构造函数可以创建一个空的 WeakSet 实例:

const weakSet = new WeakSet();

WeakSet 不支持直接向其中添加成员,需要通过其 add() 和 delete() 方法来添加和删除元素。注意,加入 WeakSet 中的成员必须是对象。

WeakSet 属性和方法

WeakSet 实例具有以下常用属性和方法:

  • add(value):向 WeakSet 中添加元素,如果元素已经存在则不会重复添加。
  • delete(value):从 WeakSet 中删除指定元素,如果元素不存在则不会报错。
  • has(value):判断 WeakSet 中是否包含指定元素。返回值为布尔类型。

WeakSet 示例

// 创建 WeakSet 实例
const weakSet = new WeakSet();

// 添加对象
const obj1 = { name: '张三' };
const obj2 = { name: '李四' };
weakSet.add(obj1); // WeakSet { [object Object] }
weakSet.add(obj2); // WeakSet { [object Object], [object Object] }

// 删除对象
weakSet.delete(obj2); // true

// 判断对象是否存在
weakSet.has(obj1); // true
weakSet.has(obj2); // false

总结

Set 和 WeakSet 是两种强大的集合类型,它们可以有效地帮助我们去重、快速查找元素、取集合的交、并、差等操作。在实际开发过程中,我们可以根据需要选用不同的集合类型来优化代码。同时,在使用 WeakSet 时需要注意对象生命周期和内存泄漏等问题,以保证代码的健壮性和性能。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a6339aadd4f0e0ffee890a


纠错反馈