最近是否更改了Map的垃圾收集?

时间:2017-08-05 16:58:48

标签: javascript garbage-collection weakmap

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中看到有关该内容的某种陈述或我误解了某些内容?

1 个答案:

答案 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]);