2017-08-05 2 views
1

地図WeakMapの主な違い(私が思ったように)その:にマップのガベージコレクションが最近変更されましたか?

我々は 地図にオブジェクトを格納しているし、後でそのオブジェクトが他の場所でに参照されていない場合は

、そのオブジェクトがしますまだガベージコレクションプロセスには含まれていないため、Map内でアクセスできます。

しかし、WeakMapに格納されていて、そのオブジェクトがコード内の他の場所に参照されていない場合は、ガベージコレクションされます。

今、この例を見て、出力は私が今どこかもはや参照を持っていない地図でも、オブジェクトがガベージコレクトされているように見える取得しています:

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

userRoles.set(Corey, "Admin"); 

Corey = null; 

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

仕様を持っています私はMDNのそれに関する何らかの声明を見ることができないか、または私が何か誤解してしまったので変わったのですか?

+0

期待されているどのような結果を、それを見つけることができますか? – guest271314

答えて

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

あなたがnullのためのあなたのマップにエントリを持っていないので、それはundefinedです。 Coreynullに設定しました。そのコード行を実行すると、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]);

関連する問題