Maison  >  Article  >  interface Web  >  Qu'est-ce qu'un WeakMap en JavaScript ?

Qu'est-ce qu'un WeakMap en JavaScript ?

WBOY
WBOYoriginal
2024-07-19 15:32:10865parcourir

What is a WeakMap in JavaScript?

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.

Pourquoi avons-nous besoin de WeakMap ?

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.

Comment utilisons-nous WeakMap ?

Un WeakMap est créé à l'aide du constructeur WeakMap. Voici comment vous pouvez l'utiliser :

  1. Créer une WeakMap :
let weakMap = new WeakMap();
  1. Définition des valeurs :
let obj = {};
weakMap.set(obj, 'value associated with obj');
  1. Obtenir des valeurs :
console.log(weakMap.get(obj)); // 'value associated with obj'
  1. Vérification de l'existence :
console.log(weakMap.has(obj)); // true
  1. Suppression de valeurs :
weakMap.delete(obj);
console.log(weakMap.has(obj)); // false

Exemples drôles

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 :

  • Création de super-héros : Batman et Superman sont créés en tant qu'objets.
  • Entrer dans la cachette :Ils entrent dans leurs cachettes respectives et nous stockons ces informations dans la WeakMap.
  • Quitter la cachette : Lorsque Batman quitte la cachette (c'est-à-dire batman = null), il n'y a plus de références à Batman. La collecte des déchets supprimera Batman de la mémoire.
  • Vérification de la cachette : Après un délai d'attente, nous vérifions la cachette. Batman a été supprimé (déchets collectés), mais Superman est toujours là.

Pourquoi est-ce drôle ?

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.

Points clés

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn