Une WeakMap est une collection de paires clé-valeur où les clés sont des objets et les valeurs peuvent être des valeurs arbitraires. Contrairement à Map classique, les clés de WeakMap sont « faiblement référencées ». Cela signifie que s'il n'y a pas d'autres références à un objet clé, celui-ci peut être récupéré, aidant ainsi à éviter les fuites de mémoire.
1. Gestion de la mémoire : Aide à une utilisation efficace de la mémoire en permettant le garbage collection des clés inutilisées.
2. Données privées : Peuvent être utilisées pour stocker des données privées pour des objets, car les données ne sont accessibles que si vous disposez de la clé de l'objet.
3. Éviter les fuites de mémoire : Particulièrement utile dans des scénarios tels que la manipulation du DOM où vous souhaiterez peut-être stocker des métadonnées pour les éléments du DOM sans empêcher leur garbage collection lorsqu'ils sont supprimés du DOM.
Un WeakMap est créé à l'aide du constructeur WeakMap. Voici comment vous pouvez l'utiliser :
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
Utilisons une WeakMap pour savoir quels super-héros se trouvent actuellement dans une cachette secrète. La cachette secrète ne conserve les informations sur les super-héros que tant qu'ils sont à l'intérieur. Une fois partis, la cachette les oublie pour éviter une surcharge de mémoire.
Exemple : Cachette de super-héros
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);
Dans cet exemple :
Imaginez une cachette secrète si secrète qu'elle oublie même qui était à l'intérieur s'ils ne reviennent pas assez tôt ! Tout comme dans cet exemple, WeakMap oublie Batman une fois qu'il est parti, gardant la mémoire de la cachette propre et efficace.
Les clés doivent être des objets : Vous ne pouvez utiliser des objets que comme clés dans une WeakMap.
Non itérable : WeakMap n'est pas itérable, vous ne pouvez donc pas l'utiliser avec des boucles comme for-of.
Garbage collection : Le principal avantage est qu'il permet au garbage collector de nettoyer les clés qui ne sont plus référencées ailleurs dans le programme, évitant ainsi les fuites de mémoire.
Cela rend WeakMap particulièrement utile dans les cas où vous devez stocker des données temporaires liées à des objets sans vous soucier de garder ces objets en vie inutilement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!