2017-08-05 34 views
1

地圖WeakMap之間的主要區別(我認爲)認爲:最近更改了Map的垃圾回收嗎?

如果我們存儲的對象地圖,然後在其他地方後該對象不參照,該對象將仍然沒有包含在垃圾收集過程中,我們仍然可以在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 ?? 

這是因爲undefined你在你的地圖null沒有條目。您已將Corey設置爲null,因此當您運行該行代碼時,您正在執行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]);