JavaScript - WeakSet 对象
JavaScript WeakSet 对象是一个对象集合。WeakSet 与 Set 非常相似。WeakSet 和 Set 的主要区别在于 WeakSet 只包含对象,而 Set 还可以包含数字、布尔值、字符串等值。
WeakSet 对象是弱引用,这意味着对 WeakSet 中对象的引用是弱引用。如果 WeakSet 中存储的值不存在其他引用,则这些值可以被垃圾回收。
WeakSet 对象可用于跟踪对象,而不会阻止它们被垃圾回收。例如,无需手动从 DOM 中删除 DOM 节点,即可跟踪它们。
语法
按照以下语法在 JavaScript 中定义 WeakSet 类的新实例。
const weakened = new WeakSet([iterable]);
在上述语法中,我们使用了带有"new"关键字的 WeakSet() 构造函数。
参数
iterable − 它是一个包含多个对象的可迭代对象,用于初始化 WeakSet。
在 JavaScript 中,即使两个对象包含相同的属性和值,由于它们的引用不同,它们仍然是不同的。
这里列出了 WeakSet 的方法和属性。
WeakSet 属性
这里列出了 WeakSet 的所有属性及其说明。
| Sr.No. | 属性 & 说明 |
|---|---|
| 1 |
constructor 返回 WeakSet 构造函数。 |
WeakSet 方法
以下是与 WeakSet 对象相关的方法及其说明的列表。
| Sr.No. | 方法 & 说明 |
|---|---|
| 1 |
将对象插入到 WeakSet 中。 |
| 2 |
从 WeakSet 中删除单个对象。 |
| 3 |
检查 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 = "The car object is added successfully to the weak_set.";
}
</script>
</body>
</html>
输出
The car object is added successfully to the 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 = "The car object is deleted successfully from the carWeakSet? " + flag;
</script>
</body>
</html>
输出
The car object is deleted successfully from the carWeakSet? true
WeakSet 不可迭代。因此,你无法遍历其元素。

