WeakSet
对象是一个对象集合。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
的所有属性及其描述的列表:
WeakSet 方法
下面是与 WeakSet
对象相关的方法及其描述的列表:
序号 |
方法 & 描述 |
1 |
add() |
2 |
delete() |
3 |
has() |
示例
示例:类似对象与 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);
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
是不可迭代的。所以,你无法遍历它的元素。