首页 > web前端 > js教程 > JavaScript 中 WeakMap 和 WeakSet 的故事:被遗忘的秘密的守护者

JavaScript 中 WeakMap 和 WeakSet 的故事:被遗忘的秘密的守护者

Susan Sarandon
发布: 2024-12-01 02:54:09
原创
875 人浏览过

A Tale of WeakMap and WeakSet in JavaScript: The Guardians of Forgotten Secrets

曾几何时,在 JavaScript 的神秘土地上,有两种特殊的数据结构静静地生活在阴影中:WeakMapWeakSet。它们不像它们的表兄弟 Map 和 Set 那样浮华,但它们拥有一种秘密的力量,使它们在内存管理的神奇领域中无可替代。


故事开始:被遗忘的秘密问题

有一位聪明的老巫师,名叫戴夫,经常从事大型魔法项目。他有一个常见的问题:每当他将对象存储在 Map 或 Set 中时,这些对象就会永远保留,就像不会离开聚会的客人一样。即使不再需要它们,它们也会留下来,占据王国宝贵的记忆。

Dev 认为,“如果有一种方法可以暂时存储秘密,而不用担心自己清理干净怎么办?”


WeakMap 和 WeakSet 的到来

有一天,一张神秘的卷轴送来了一条消息:

“使用WeakMapWeakSet来处理你忘记的秘密。当不再需要它们时,它们就会消失。”

出于好奇,Dev 召唤了 WeakMapWeakSet


WeakMap:私钥的守护者

WeakMap 自我介绍:

“我持有键值对,但我的键必须是对象。如果钥匙消失了,我会删除这对钥匙,无需您担心。”

开发人员测试了它:

let key = { id: 1 }; // The magical key
let weakMap = new WeakMap();

weakMap.set(key, "This is a secret"); // Storing a secret

console.log(weakMap.get(key)); // Output: This is a secret

// If the key is forgotten:
key = null;

// The secret vanishes from WeakMap, cleaned by the garbage collector
登录后复制

WeakMap 解释:

“我非常适合存储有关对象的私有元数据,例如跟踪用户会话或缓存结果。”


WeakSet:沉默的观察者

WeakSet上前:

“我也存储对象,但只是对象。如果一个对象消失了,它在我的集合中的成员资格也会消失。”

开发人员决定尝试一下:

let obj = { name: "Mystical Object" };
let weakSet = new WeakSet();

weakSet.add(obj); // Adding the object to the WeakSet

console.log(weakSet.has(obj)); // Output: true

// If the object is forgotten:
obj = null;

// The object is automatically removed from WeakSet
登录后复制

WeakSet 继续:

“我非常适合跟踪需要暂时存在的对象,例如观察 DOM 元素的变化。”


为什么 WeakMap 和 WeakSet 很特别

当 Dev 与他们合作时,他意识到为什么这些结构是独一无二的:

  1. 自动清理:WeakMap 和 WeakSet 中的对象在其他地方不再被引用时会自动进行垃圾回收。
  2. 无大小属性:他们没有大小或迭代器,因为他们想保持他们的秘密轻量级和不可见。
  3. 记忆效率:它们就像风一样——松松地握住东西,并在适当的时候放开它们。

故事的寓意

Dev 对他的新工具很满意。 WeakMap 和 WeakSet 成为他高效管理内存和保护私有数据安全的忠实盟友。巫师了解到,虽然他们并不总是正确的选择,但他们的魔法在正确的情况下是无价的。

因此,在 JavaScript 的土地上,秘密保持安全,内存再也不会被浪费。

以上是JavaScript 中 WeakMap 和 WeakSet 的故事:被遗忘的秘密的守护者的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板