2017-08-05 1 views
1

Der wesentliche Unterschied zwischen Karte und WeakMap (wie ich dachte), dass:hat die Speicherbereinigung von Map kürzlich geändert?

Wenn wir ein Objekt in Karte und dann später gespeichert haben, dass das Objekt nicht an anderen Stellen verwiesen, dass Objekt immer noch nicht in den Garbage-Collection-Prozess aufgenommen werden und wir können weiterhin auf die Karte zugreifen.

Aber, wenn es in WeakMap gespeichert ist und später dieses Objekt nicht auf woanders im Code verwiesen wird, dann wird es Müll gesammelt werden.

Jetzt bei diesem Beispiel suchen und die Ausgabe i es sieht aus wie auch in der Karte das Objekt bekommen werde, die keinen Bezug mehr woanders jetzt hat, ist Müll gesammelt:

const userRoles = new Map(); 
let Corey = { name: "Corey", age: "40" }; 

userRoles.set(Corey, "Admin"); 

Corey = null; 

console.log(userRoles.get(Corey)); // Undefined ?? 

hat die Spezifikationen geändert, weil ich in MDN keine Art von Aussage darüber sehen kann oder habe ich etwas falsch verstanden?

+0

Was Ergebnis Code in Frage erwartet? – guest271314

Antwort

4
console.log(userRoles.get(Corey)); // Undefined ?? 

Es ist undefined, weil Sie keinen Eintrag in der Karte für null haben. Sie haben Corey auf null festgelegt. Wenn Sie diese Codezeile ausführen, wird userRoles.get(null) angezeigt.

Der unter dem Objekt eingegebene Eintrag ist immer noch vorhanden. Man könnte es durch Iteration finden, die keys iterable, etc .:

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

Verwandte Themen