Map 和 WeakMap 之间的主要区别(如我所想):
如果我们在 Map 中存储了一个对象,之后该对象没有在其他地方被引用,该对象仍然不会被包含在垃圾回收过程中,我们仍然可以访问它 map 。
但是,如果它存储在 WeakMap 中,然后该对象没有在代码中的其他地方引用,那么它将被垃圾收集。
现在看看这个例子和我得到的输出,它看起来甚至是 Map 中的对象,它在其他地方不再有引用,现在正在被垃圾收集:
const userRoles = new Map();
let Corey = { name: "Corey", age: "40" };
userRoles.set(Corey, "Admin");
Corey = null;
console.log(userRoles.get(Corey)); // Undefined ??
规范是否因为我在 MDN 中看不到关于它的某种声明或我误解了什么而改变了?
最佳答案
console.log(userRoles.get(Corey)); // Undefined ??
它是 undefined
因为您的 map 中没有 null
的条目。您已将 Corey
设置为 null
,因此当您运行该行代码时,您正在执行 userRoles.get(null)
。
在对象下键入的条目仍然存在。您可以通过迭代找到它,keys
可迭代等:
const userRoles = new Map();
let Corey = { name: "Corey", age: "40" };
userRoles.set(Corey, "Admin");
Corey = null;
console.log(userRoles.get(Corey)); // Undefined
console.log(Array.from(userRoles.keys())[0]);
关于javascript - Map 的垃圾收集最近有变化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45524371/