JavaScript - WeakSet 对象



JavaScript WeakSet 对象是对象的集合。WeakSet Set 非常相似。WeakSet 和 Set 之间的主要区别在于 WeakSet 只包含对象,而 Set 还可以包含数字、布尔值、字符串等值。

WeakSet 对象是弱对象,这意味着对 WeakSet 中对象的引用是弱保留的。如果不存在对 WeakSet 中存储的值的其他引用,则可以对这些值进行垃圾回收。

WeakSet 对象可用于跟踪对象,而不会阻止它们被垃圾回收。这方面的一个例子是跟踪 DOM 节点,而不必手动从 DOM 中删除它们。

语法

按照下面的语法在 JavaScript 中定义 WeakSet 类的新实例。


 const weakest = new WeakSet([iterable]);

在上面的语法中,我们使用了带有 'new' 关键字的 WeakSet() 构造函数。

参数

  • iterable − 它是一个包含多个对象的可迭代对象,用于初始化 WeakSet。
在 JavaScript 中,如果两个对象包含相同的属性和值,它们仍然不同,因为它们的引用不同。

在这里,我们列出了 WeakSet 的方法和属性。

WeakSet 属性

以下是 WeakSet 的所有属性及其描述的列表。

属性 描述
constructor

返回 WeakSet 构造函数。

WeakSet 方法

以下是与 WeakSet 对象相关的方法列表及其描述。

方法 描述
add()

将对象插入 WeakSet。

delete()

从 WeakSet 中删除单个对象。

has()

检查 WeakSet 中是否存在特定对象。

例子

示例:具有 WeakSet 的类似对象

在下面的示例中,我们定义了 obj1 和 obj2 空对象,并将它们添加到 WeakSet 中。

此外,我们还使用了 has() 方法来检查该集合是否包含 obj1 和 obj2 对象。这两个对象看起来相似,但在内存中具有不同的引用。因此,WeakSet 包含这两个对象。


<html>
<body>
	 	<p id = "output"> </p>
	 	<script>
	 	 	 const output = document.getElementById("output");
	 	 	 const obj1 = {};
	 	 	 const obj2 = {};
	 	 	 const weak_set = new WeakSet([obj1, obj2]);

	 	 	 if(weak_set.has(obj1)) {
	 	 	 	 	output.innerHTML += "The weak_set contains the obj1 object! <br>";
	 	 	 }

	 	 	 if(weak_set.has(obj2)) {
	 	 	 	 	output.innerHTML += "The weak_set contains the obj2 object! <br>";
	 	 	 }
	 	</script>
</body>
</html>

输出

The weak_set contains the obj1 object!
The weak_set contains the obj2 object!

示例:在 WeakSet 中添加对象

在下面的示例中,我们定义了包含 0 个元素的 WeakSet。此外,我们还定义了 car 对象,并使用 add() 方法将对象添加到集合中。

之后,我们使用 has() 方法检查对象是否已添加到 WeakSet 中。


<html>
<body>
	 	<p id = "output"> </p>
	 	<script>
	 	 	 const output = document.getElementById("output");
	 	 	 const weak_set = new WeakSet();
	 	 	 const car = {
	 	 	 	 	brand: "Audi",
	 	 	 	 	model: "Q5",
	 	 	 }
	 	 	 weak_set.add(car);
	 	 		
	 	 	 if (weak_set.has(car)) {
	 	 	 	 	output.innerHTML = "car 对象已成功添加到 weak_set 中。";
	 	 	 }
	 	</script>
</body>
</html>

输出

car 对象已成功添加到 weak_set 中。

示例:从 WeakSet 中删除对象

在下面的示例中,我们使用 car 对象初始化了 WeakSet。之后,我们使用 delete() 方法从 WeakSet 中删除对象。


<html>
<body>
	 	<p id = "output"> </p>
	 	<script>
	 	 	 const output = document.getElementById("output");
	 	 	 const car = {
	 	 	 	 	brand: "Audi",
	 	 	 	 	model: "Q5",
	 	 	 }
	 	 	 const carWeakSet = new WeakSet([car]);
		 	 	 const flag = carWeakSet.delete(car); // 如果删除成功,则返回true
	 	 	 output.innerHTML = "是否已成功从carWeakSet中删除 car 对象? " + flag;
	 	</script>
</body>
</html>

输出

是否已成功从carWeakSet中删除 car 对象? true

WeakSet 是不可迭代的。因此,您无法遍历其元素。