曾几何时,在 JavaScript 的神秘土地上,有两种特殊的数据结构静静地生活在阴影中:WeakMap 和 WeakSet。它们不像它们的表兄弟 Map 和 Set 那样浮华,但它们拥有一种秘密的力量,使它们在内存管理的神奇领域中无可替代。
有一位聪明的老巫师,名叫戴夫,经常从事大型魔法项目。他有一个常见的问题:每当他将对象存储在 Map 或 Set 中时,这些对象就会永远保留,就像不会离开聚会的客人一样。即使不再需要它们,它们也会留下来,占据王国宝贵的记忆。
Dev 认为,“如果有一种方法可以暂时存储秘密,而不用担心自己清理干净怎么办?”
有一天,一张神秘的卷轴送来了一条消息:
“使用WeakMap和WeakSet来处理你忘记的秘密。当不再需要它们时,它们就会消失。”
出于好奇,Dev 召唤了 WeakMap 和 WeakSet。
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上前:
“我也存储对象,但只是对象。如果一个对象消失了,它在我的集合中的成员资格也会消失。”
开发人员决定尝试一下:
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 元素的变化。”
当 Dev 与他们合作时,他意识到为什么这些结构是独一无二的:
Dev 对他的新工具很满意。 WeakMap 和 WeakSet 成为他高效管理内存和保护私有数据安全的忠实盟友。巫师了解到,虽然他们并不总是正确的选择,但他们的魔法在正确的情况下是无价的。
因此,在 JavaScript 的土地上,秘密保持安全,内存再也不会被浪费。
以上是JavaScript 中 WeakMap 和 WeakSet 的故事:被遗忘的秘密的守护者的详细内容。更多信息请关注PHP中文网其他相关文章!