📜  ES6 中的弱映射是什么?

📅  最后修改于: 2022-05-13 01:56:44.095000             🧑  作者: Mango

ES6 中的弱映射是什么?

WeakMap 是 ES6 中引入的一种新的数据结构或集合。 WeakMaps 允许您存储键值对的集合。它采用了与 Map 相同的属性。主要区别在于 WeakMap 的键不能是原始数据类型。键必须是对象类型,值可以是任何数据类型。

另一个主要区别是 WeakMap 的key是弱引用的。这意味着每当一个对象被用作 WeakMap 的键时,该对象就可以被垃圾回收。当对该对象的引用丢失(即将该对象引用分配给NULL)时,可能会发生这种情况。当对象不再使用时,JavaScript 垃圾回收会检测到它并将其从内存中释放。因此 WeakMaps 的键被弱引用。

句法:

const m = new WeakMap();

参数:它是一个 Iterable 对象,其元素为键值对形式。

WeakMap的功能:

  • set(key, value):用于向 WeakMap 对象添加一个元素(键值对)。
  • get(key):它返回与指定“key”关联的值。
  • has(key):该函数用于检查指定的“key”是否存在于 WeakMap 中。如果存在则返回true ,如果不存在则返回false
  • delete(key):从 WeakMap 对象中删除指定“key”的元素。

示例:显示这些函数的工作原理的 JavaScript 代码。

Javascript
// Creating a WeakMap Object
const m = new WeakMap();
  
// Adding elements in it
  
// Remember, only object can
// be a key in WeakMap
obj1 = {} 
m.set(obj1, "Object 1");
obj2 = {}
m.set(obj2, "Object 2");
  
// Use delete() function
m.delete(obj2);
  
// Print the WeakMap
console.log(m);
  
// Using get() function to get 
// specific element in WeakMap
console.log(m.get(obj1));
  
// Using has() function to check
// if a particular element is 
// present in WeakMap or not.
console.log(m.has(obj1));


输出:以下是上述代码在浏览器中的输出。

解释:

  • 第一行是打印 WeakMap 的内容。
  • 我们在打印之前删除了 obj2,因此它不会显示在控制台中。
  • 在第二行中,我们使用了 .get(obj1)函数,因此它返回了值,即对象 1。
  • 第三行是我们试图查找 obj1 是否存在于 WeakMap 'm' 中,它返回true