JavaScript WeakMap对象

JavaScript WeakMap对象

本文将介绍JavaScript中的WeakMap对象,以及如何有效地利用它们存储更多的键值对,并防止它们被垃圾回收器收集。

WeakMap对象是JavaScript的本地数据结构,它是在ES6(ECMAScript 2015)版本中添加的。借助WeakMap对象,我们可以存储与对象关联的私有数据,而不会干扰垃圾回收。

让我们看一些示例和方法,以更好地理解这个概念−

示例1 – 添加和获取值

WeakMap的键必须是对象,值可以是任何类型。借助set(key, value)和get(key)方法,我们可以向WeakMap中添加键值对并检索值。

在这个示例中,我们将−

  • 创建一个WeakMap对象,并使用set()方法添加键值对。

  • 使用get()方法检索值。

文件名 – index.html

<html>
<head>
   <title>WeakMap object in JavaScript.</title>
   <script>
      let weakMap = new WeakMap();
      let obj1 = {};
      let obj2 = {};

      weakMap.set(obj1, 'Value 1');
      weakMap.set(obj2, 'Value 2');

      console.log(weakMap.get(obj1)); // Output: Value 1
      console.log(weakMap.get(obj2)); // Output: Value 2
   </script>
</head>
<body>
   <h1>WeakMap Object - Adding and Retrieving Values</h1>
</body>
</html>

输出

结果将如下图所示。

JavaScript WeakMap对象

示例2 – WeakMap垃圾回收及其弱引用

WeakMap对其键使用弱引用,这意味着如果在WeakMap中用作键的对象没有其他引用,那么当它不再使用时,它将被垃圾回收。当对象被垃圾回收时,相应的键值对将自动从WeakMap中删除。

在此示例中,我们将执行以下操作:

  • 在函数内部创建一个对象obj,并将键值对添加到WeakMap中。

  • 由于obj在函数外部无法访问,因此它变得可回收,且键值对将自动从WeakMap中移除。

文件名 – index.html

<html>
<head>
   <title>WeakMap object in JavaScript.</title>
   <script>
      let myMap = new Map();

      myMap.set('name', 'John');
      myMap.set('age', 30);

      myMap.forEach((value, key) => {
         console.log(`{key}:{value}`);
      });

      for (let key of myMap.keys()) {
         console.log(key);
      }

      for (let value of myMap.values()) {
         console.log(value);
      }

      for (let [key, value] of myMap.entries()) {
         console.log(`{key}:{value}`);
      }
   </script>
</head>
<body>
   <h1>Map Object - Iterating over a Map</h1>
</body>
</html>

输出

结果将如下图所示。

JavaScript WeakMap对象

结论

总而言之,在JavaScript中,WeakMap对象可用于将辅助数据与对象关联,而不会干扰垃圾回收。它使用弱引用作为键,这在应用程序中不再使用或在DOM树中无法访问时,可以自动清除键值对。我们了解了什么是JavaScript中的WeakMap对象,使用了不同的方法,并看了一些解释相同的示例。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程