diff options
Diffstat (limited to 'files/fr/web/javascript/reference')
-rw-r--r-- | files/fr/web/javascript/reference/global_objects/weakmap/index.md | 106 |
1 files changed, 47 insertions, 59 deletions
diff --git a/files/fr/web/javascript/reference/global_objects/weakmap/index.md b/files/fr/web/javascript/reference/global_objects/weakmap/index.md index ab6d2c13cd..e37d4ae5fd 100644 --- a/files/fr/web/javascript/reference/global_objects/weakmap/index.md +++ b/files/fr/web/javascript/reference/global_objects/weakmap/index.md @@ -1,61 +1,51 @@ --- title: WeakMap slug: Web/JavaScript/Reference/Global_Objects/WeakMap -tags: - - ECMAScript 2015 - - JavaScript - - Reference - - WeakMap translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap original_slug: Web/JavaScript/Reference/Objets_globaux/WeakMap +browser-compat: javascript.builtins.WeakMap --- {{JSRef}} L'objet **`WeakMap`** représente une collection de paires clé-valeur dont les clés sont des objets et pour lesquelles les références sont « faibles » et les valeurs des valeurs quelconques. -> **Note :** vous pouvez en savoir plus sur les `WeakMap` en lisant l'article sur [les collections à clé](/fr/docs/Web/JavaScript/Guide/Collections_avec_clés#Le_type_WeakMap). - -## Syntaxe - - new WeakMap([itérable]) - -### Paramètres - -- `itérable` - - : Paramètre optionnel. Un tableau (objet `Array`) ou tout autre objet itérable dont les éléments sont des paires composées d'une clé et d'une valeur (des tableaux de 2 éléments). Chaque paire sera ajoutée à la carte (_map_ en anglais). {{jsxref("null")}} sera traité comme {{jsxref("undefined")}}. +Vous pouvez en savoir plus sur les `WeakMap` en lisant l'article sur [les collections à clé](/fr/docs/Web/JavaScript/Guide/Keyed_collections). ## Description -Les clés des objets `WeakMap` sont nécessairement du type `Object`. {{Glossary("Primitive", "Des types de données primitifs")}} ne sont pas autorisés pour les clés (ex : un {{jsxref("Symbol")}} ne peut pas être une clé dans un `WeakMap`). +Les clés des objets `WeakMap` sont nécessairement du type `Object`. {{Glossary("Primitive", "Des types de données primitifs")}} ne sont pas autorisés pour les clés (ex : un [`Symbol`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Symbol) ne peut pas être une clé dans un `WeakMap`). -Les clés d'une `WeakMap` sont référencées _faiblement_. Cela signifie que s'il n'existe aucune autre référence « forte » vers la clé, l'élément (la clé et la valeur) sera retiré de la `WeakMap` par le ramasse-miettes. +Les clés d'une `WeakMap` sont référencées _faiblement_. Cela signifie que s'il n'existe aucune autre référence « forte » vers la clé, l'élément (la clé et la valeur) sera retiré de la `WeakMap` par le ramasse-miettes. ### Pourquoi *Weak*Map ? Avec un certain recul, on peut voir que cette API aurait pu être implémentée en JavaScript grâce à deux tableaux (un tableau pour stocker les clés, l'autre pour les valeurs) associées à 4 méthodes. -Une telle implémentation présente deux inconvénients principaux. Le premier est que la recherche serait effectué en O(n) (avec n le nombre de clés). Le second inconvénient concerne les fuites mémoires. Si la carte (_map_) est construite manuellement, le tableau contenant les clés serait obligé de garder les références vers les objets que sont les clés, ce qui les empêcheraient d'être nettoyés par le ramasse-miette. Grâce aux objets natifs `WeakMap`, les références vers les clés sont faibles (_weak_) ce qui permet au ramasse miette de nettoyer l'objet au cas où il n'y aurait pas d'autres références vers cet objet. - -Étant donné que les références sont faibles, il est impossible d'énumérer les clés des objets `WeakMap` (c'est-à-dire qu'on ne dispose pas d'une méthode renvoyant la liste des clés). Si c'était le cas, la liste dépendrait d'un état lié au ramasse-miette et il n'y aurait pas de façon déterministe de connaître le résultat. Si vous souhaitez avoir une liste de clés, vous devriez plutôt utiliser un objet {{jsxref("Map")}}. +Une telle implémentation présente deux inconvénients principaux : -## Propriétés +1. Le premier est que la recherche serait effectuée en O(n) (avec n le nombre de clés). -- `WeakMap.length` - - : La valeur de la propriété `length` vaut 0. -- {{jsxref("WeakMap.prototype")}} - - : Cette propriété représente le prototype du constructeur `WeakMap`. Il permet d'ajouter des propriétés pour toutes les instances de `WeakMap`. +2. Le second inconvénient concerne les fuites mémoires. Si la carte (_map_) est construite manuellement, le tableau contenant les clés serait obligé de garder les références vers les objets que sont les clés, ce qui les empêcherait d'être nettoyés par le ramasse-miette. -## Instances de `WeakMap` +Grâce aux objets natifs `WeakMap`, les références vers les clés sont faibles (_weak_) ce qui permet au ramasse-miette de nettoyer l'objet au cas où il n'y aurait pas d'autres références vers cet objet. -Toutes les instances de `WeakMap` héritent de {{jsxref("WeakMap.prototype")}}. +**Étant donné que les références sont faibles, il est impossible d'énumérer les clés des objets `WeakMap`** (c'est-à-dire qu'on ne dispose pas d'une méthode renvoyant la liste des clés). Si c'était le cas, la liste dépendrait d'un état lié au ramasse-miette et il n'y aurait pas de façon déterministe de connaître le résultat. Si vous souhaitez avoir une liste de clés, vous devriez plutôt utiliser un objet [`Map`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Map). -### Propriétés +## Constructeur -{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/WeakMap/prototype','Properties')}} +- [`WeakMap()`](/fr/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/WeakMap) + - : Crée un nouvel objet `WeakMap`. -### Méthodes +## Méthodes des instances -{{page('fr/docs/Web/JavaScript/Reference/Objets_globaux/WeakMap/prototype','Methods')}} +- [`WeakMap.prototype.delete(<var>key</var>)`](/fr/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/delete) + - : Supprime toute valeur associée avec la clé `key`. `WeakMap.prototype.has(key)` renverra `false` après coup. +- [`WeakMap.prototype.get(<var>key</var>)`](/fr/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/get) + - : Renvoie la valeur associée à la clé `key`, ou `undefined` si cette clé n'est pas présente. +- [`WeakMap.prototype.has(<var>key</var>)`](/fr/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/has) + - : Renvoie un booléen indiquant s'il existe une valeur pour la clé `key` au sein de l'objet `WeakMap`. +- [`WeakMap.prototype.set(<var>key</var>, <var>value</var>)`](/fr/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/set) + - : Définit la valeur pour la clé `key` dans l'objet `WeakMap`. La valeur de retour est l'objet `WeakMap`. ## Exemples @@ -95,43 +85,41 @@ wm1.has(o1); // false ```js class ClearableWeakMap { - constructor(init) { - this._wm = new WeakMap(init) - } - clear() { - this._wm = new WeakMap() - } - delete(k) { - return this._wm.delete(k) - } - get(k) { - return this._wm.get(k) - } - has(k) { - return this._wm.has(k) - } - set(k, v) { - this._wm.set(k, v) - return this - } + constructor(init) { + this._wm = new WeakMap(init) + } + clear() { + this._wm = new WeakMap() + } + delete(k) { + return this._wm.delete(k) + } + get(k) { + return this._wm.get(k) + } + has(k) { + return this._wm.has(k) + } + set(k, v) { + this._wm.set(k, v) + return this + } } ``` ## Spécifications -| Spécification | État | Commentaires | -| ---------------------------------------------------------------------------- | ---------------------------- | -------------------- | -| {{SpecName('ESDraft', '#sec-weakmap-objects', 'WeakMap')}} | {{Spec2('ESDraft')}} | | -| {{SpecName('ES2015', '#sec-weakmap-objects', 'WeakMap')}} | {{Spec2('ES2015')}} | Définition initiale. | +{{Specifications}} ## Compatibilité des navigateurs -{{Compat("javascript.builtins.WeakMap")}} +{{Compat}} ## Voir aussi -- [Le guide sur les collections à clé JavaScript](/fr/docs/Web/JavaScript/Guide/Collections_avec_clés#Le_type_WeakMap) +- Une prothèse (*polyfill*) de `WeakMap` est disponible dans [`core-js`](https://github.com/zloirock/core-js#weakmap) +- [Le guide sur les collections à clé JavaScript](/fr/docs/Web/JavaScript/Guide/Keyed_collections) - [Masquer des détails d'implémentation avec les WeakMaps ECMAScript 2015](https://fitzgeraldnick.com/weblog/53/) (en anglais) -- {{jsxref("Map")}} -- {{jsxref("Set")}} -- {{jsxref("WeakSet")}} +- [`Map`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Map) +- [`Set`](/fr/docs/Web/JavaScript/Reference/Global_Objects/Set) +- [`WeakSet`](/fr/docs/Web/JavaScript/Reference/Global_Objects/WeakSet) |