ES6 是 JavaScript 的一个重要版本更新,带来了许多新的特性和语法。其中,set 和 WeakSet 是新加入的两个数据结构,用于存储无重复值的数据集合。本文主要介绍 set 和 WeakSet 的使用方法,以及它们的异同点和适用场景。
Set
Set 对象是 ES6 引入的一种新的数据结构,它类似于数组,但成员的值都是唯一的,没有重复的值。Set 的实例化方法有两种:使用构造函数和使用可迭代对象。
构造函数创建 Set
构造函数 Set 接收一个可迭代对象作为参数,并将其转换为一个 Set 对象。以下是使用构造函数创建 Set 的示例代码:
const set1 = new Set([1, 2, 3, 4, 5]); console.log(set1); // Set { 1, 2, 3, 4, 5 }
使用可迭代对象创建 Set
Set 也可以通过扩展运算符和那些可迭代对象的转换为 Set,以下是使用可迭代对象创建 Set 的示例代码:
const set2 = new Set(); const arr = [1, 2, 3, 4, 5]; set2.add(...arr); console.log(set2); // Set { 1, 2, 3, 4, 5 }
Set 中的属性和方法
Set 有以下属性和方法:
Set.prototype.size
:返回 Set 实例中元素的数量。Set.prototype.add(value)
:添加一个值到 Set 实例中,如果该值已经存在于 Set 中,则不会重复添加。Set.prototype.delete(value)
:删除 Set 中指定的值,删除成功返回 true,否则返回 false。Set.prototype.has(value)
:判断 Set 中是否存在指定值,存在返回 true,否则返回 false。Set.prototype.clear()
:清空 Set 中的所有元素。
以下是实例化 Set 并使用其属性和方法的示例代码:
-- -------------------- ---- ------- ----- ---- - --- ------- -- -- -- ---- ----------------------- -- - ------------ ----------------------- -- - ------------------------- -- ---- -------------------------- -- ----- --------------- ------------------ -- --- - -- -- -- -- - - ------------- ----------------------- -- -
WeakSet
WeakSet 是一种特殊的 Set 数据结构,它与 Set 相比有以下不同点:
- WeakSet 只能存储对象引用,不能存储任何其他类型的值。
- WeakSet 的值是弱引用,即如果对象被垃圾回收机制回收后,其在 WeakSet 中的引用也会失效,从而自动被删除。
- WeakSet 没有 size 属性,不支持 clear() 方法和迭代器。
以下是创建和使用 WeakSet 的示例代码:
const obj1 = { name: "Tom" }; const obj2 = { name: "Jerry" }; const weakSet = new WeakSet([obj1, obj2]); // 报错,WeakSet 的构造函数不接受可迭代对象 weakSet.add(obj1); weakSet.add(obj2); console.log(weakSet.has(obj1)); // true obj1 = null; // 引用obj1的变量指向null console.log(weakSet.has(obj1)); // false
两者的异同点
由于 WeakSet 的特殊性,它与 Set 在使用场景上有一些不同:
- Set 可以存储任何类型的值,WeakSet 只能存储对象引用。
- Set 的值是强引用,即使该值在 Set 中没有引用,也不会被垃圾回收机制回收,而 WeakSet 的值是弱引用,只有被其它对象引用时才会保持有效。
- Set 可以遍历所有元素,WeakSet 不支持遍历操作。
适用场景
根据两者的异同点,我们可以得出以下的使用场景:
- Set 适用于存储和操作任何数据类型,包括基本类型、对象、函数等。
- WeakSet 适用于存储对象引用,并且不需要手动清除其引用。
总之,在使用 Set 和 WeakSet 时,我们需要根据具体的需求选择合适的数据结构,以达到更优的效果。
总结
通过本文的介绍,我们了解了 ES6 中新加入的两种数据结构 Set 和 WeakSet,它们都可以存储无重复值的数据集合,但适用场景有所不同。Set 可以存储任何类型的值,并且支持多种操作,而 WeakSet 只能存储对象引用,并且具有弱引用的特性。我们需要根据实际需求选择合适的数据结构,以达到更好的效果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6496325048841e9894313d9a