2017-08-05 2 views
1

La principale différence entre Carte et WeakMap (comme je pensais) que:La corbeille d'ordures de Map a-t-elle changé récemment?

Si nous avons stocké un objet dans Carte puis plus tard que l'objet est non référencé dans d'autres endroits, cet objet toujours pas être inclus dans le processus de collecte des ordures et nous pouvons toujours y accéder dans la carte. Mais, s'il est stocké dans WeakMap et que plus tard cet objet n'est pas référencé ailleurs dans le code, il sera collecté.

maintenant regardant cet exemple et la sortie je reçois il semble que même l'objet Carte qui n'a pas une référence plus longtemps ailleurs est maintenant déchets collectés:

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

userRoles.set(Corey, "Admin"); 

Corey = null; 

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

a les caractéristiques changé parce que je ne peux pas voir une sorte de déclaration à ce sujet dans MDN ou ai-je mal compris quelque chose?

+0

Ce qui est attendu résultat de code à la question? – guest271314

Répondre

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

Il est undefined parce que vous avez pas d'entrée dans votre carte pour null. Vous avez défini Corey sur null, et lorsque vous exécutez cette ligne de code, vous exécutez userRoles.get(null).

L'entrée saisie sous l'objet est toujours présente. Vous pouvez le trouver par itération, le keys itératives, 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]);