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。
在这里,我们列出了 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 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>
输出
示例:从 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>
输出
WeakSet 是不可迭代的。因此,您无法遍历其元素。