Map 和 WeakMap 之间的主要区别(我认为):
如果我们在 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中看到有关该内容的某种陈述或我误解了某些内容?
答案 0 :(得分:4)
console.log(userRoles.get(Corey)); // Undefined ??
它是undefined
,因为您的地图中没有null
的条目。您已将Corey
设置为null
,因此当您运行该行代码时,您正在执行userRoles.get(null)
。
在该对象下键入的条目仍然存在。你可以通过迭代,keys
iterable等找到它:
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]);