WeakMap 是鍵值對的集合,其中鍵是對象,值可以是任意值。與常規 Map 不同,WeakMap 中的鍵是「弱引用」的。這意味著如果沒有其他對關鍵物件的引用,它可以被垃圾收集,有助於防止記憶體洩漏。
1。 記憶體管理:透過允許對未使用的鍵進行垃圾回收來幫助高效記憶體使用。
2。 私有資料:可用於儲存物件的私有數據,因為除非您擁有物件金鑰,否則無法存取資料。
3。 避免記憶體洩漏: 在 DOM 操作等場景中特別有用,在這種情況下,您可能希望儲存 DOM 元素的元數據,但在從 DOM 中刪除元素時不會阻止其垃圾回收。
WeakMap 是使用 WealMap 建構函數建立的。使用方法如下:
let weakMap = new WeakMap();
let obj = {}; weakMap.set(obj, 'value associated with obj');
console.log(weakMap.get(obj)); // 'value associated with obj'
console.log(weakMap.has(obj)); // true
weakMap.delete(obj); console.log(weakMap.has(obj)); // false
讓我們使用 WealMap 來追蹤哪些超級英雄目前位於秘密藏身處。秘密藏身處只保存超級英雄在裡面的資訊。一旦他們離開,藏身處就會忘記他們以避免記憶體超載。
範例:超級英雄藏身處
let secretHideout = new WeakMap(); function Superhero(name) { this.name = name; } // Superheroes enter the hideout let batman = new Superhero('Batman'); let superman = new Superhero('Superman'); secretHideout.set(batman, 'Batcave'); secretHideout.set(superman, 'Fortress of Solitude'); console.log(secretHideout.get(batman)); // 'Batcave' console.log(secretHideout.get(superman)); // 'Fortress of Solitude' // Batman leaves the hideout batman = null; // No more references to Batman // After garbage collection, the hideout forgets about Batman setTimeout(() => { console.log(secretHideout.get(batman)); // undefined (Batman has been garbage collected) console.log(secretHideout.has(superman)); // true (Superman is still in the hideout) }, 1000);
在此範例中:
想像一下一個秘密藏身處,它是如此秘密,如果他們不盡快回來,甚至會忘記裡面是誰!就像這個例子一樣,一旦蝙蝠俠離開,WeakMap 就會忘記他,從而保持藏身處的記憶體乾淨且有效率。
鍵必須是物件:只能使用物件作為 WeakMap 中的鍵。
不可迭代: WeakMap 不可迭代,因此不能與 for-of 等迴圈一起使用。
垃圾收集:主要優點是它允許垃圾收集器清理程式中其他地方不再引用的鍵,防止記憶體洩漏。
這使得 WeakMap 對於需要儲存與物件相關的臨時資料而不必擔心保持這些物件不必要的活動的情況特別有用。
以上是JavaScript 中的 WeakMap 是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!