JavaScript - WeakSet 对象



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

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

WeakSet 对象对于跟踪对象而不阻止它们被垃圾回收很有用。例如,跟踪 DOM 节点而不必手动从 DOM 中删除它们。

语法

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

const weakest = new WeakSet([iterable]);

我们在上述语法中使用了 WeakSet() 构造函数和“new”关键字。

参数

  • iterable - 它是一个包含多个对象的 Iterable,用于初始化 WeakSet。

在 JavaScript 中,如果两个对象包含相同的属性和值,它们仍然是不同的,因为它们的引用不同。

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

WeakSet 属性

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

序号 属性和描述
1

constructor

它返回 WeakSet 构造函数。

WeakSet 方法

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

序号 方法和描述
1

add()

将对象插入 WeakSet。

2

delete()

从 WeakSet 中删除单个对象。

3

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 = "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); // returns true if deleted successfully
      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 不可迭代。因此,您无法遍历其元素。
广告