Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Référence
  4. Objets natifs standards
  5. WeakSet

Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in EnglishAlways switch to English

WeakSet

Baseline Widely available *

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨septembre 2015⁩.

* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.

Un objetWeakSet est une collection de valeurs pouvant être collectées par le ramasse-miette (garbage collector en anglais), incluant des objets et dessymboles non enregistrés. Une valeur dans leWeakSet ne peut apparaître qu'une seule fois. Elle est unique dans la collection duWeakSet.

Description

Les valeurs d'unWeakSet doivent pouvoir être collectées par le ramasse-miette. La plupart destypes de données primitives peuvent être créées arbitrairement et n'ont pas de durée de vie, elles ne peuvent donc pas être stockées. Les objets et lessymboles non enregistrés peuvent être stockés car ils sont collectables par le ramasse-miette.

Les principales différences avec l'objetSet sont :

  • LesWeakSet sont des collectionsuniquement d'objets et de symboles. Ils ne peuvent pas contenir des valeurs de n'importe quel type, contrairement auxSet.

  • LeWeakSet estfaible, ce qui signifie que les références aux objets dans unWeakSet sont maintenuesfaiblement. Si aucune autre référence à une valeur stockée dans leWeakSet n'existe, ces valeurs peuvent être collectées par le ramasse-miette.

    Note :Cela signifie également qu'il n'existe pas de liste des valeurs actuellement stockées dans la collection. LesWeakSet ne sont pas énumérables.

Égalité des clés

Comme pour unSet, l'égalité des valeurs est basée sur l'algorithmeSameValueZero, qui est équivalent à l'opérateur=== car unWeakSet ne peut contenir que des objets et des symboles. Cela signifie que pour les objets, l'égalité est basée sur l'identité de l'objet. Ils sont comparés parréférence, et non par valeur.

Constructeur

WeakSet()

Crée un nouvel objetWeakSet.

Propriétés d'instance

Ces propriétés sont définies sur leWeakSet.prototype et partagées par toutes les instances deWeakSet.

WeakSet.prototype.constructor

La fonction constructeur qui a créé l'objet instance. Pour les instances deWeakSet, la valeur initiale est le constructeurWeakSet.

WeakSet.prototype[Symbol.toStringTag]

La valeur initiale de la propriété[Symbol.toStringTag] est la chaîne de caractères"WeakSet". Cette propriété est utilisée dansObject.prototype.toString().

Méthodes des instances

WeakSet.prototype.add()

Ajoutevaleur à l'ensembleWeakSet.

WeakSet.prototype.delete()

Retirevaleur de l'ensembleWeakSet. Suite à cette opération,WeakSet.prototype.has(valeur) renverrafalse.

WeakSet.prototype.has()

Retourne un booléen indiquant sivaleur est (ou non) au sein de l'ensembleWeakSet.

Exemples

Utiliser un objetWeakSet

js
const ws = new WeakSet();const toto = {};const truc = {};ws.add(toto);ws.add(truc);ws.has(toto); // truews.has(truc); // truews.delete(toto); // retire toto de l'ensemblews.has(toto); // false, toto a été enlevéws.has(truc); // toujours true

On notera quetoto !== truc. Bien que ce soient des objets similaires, ce ne sont pasles mêmes objets. Aussi, les deux sont ajoutés à l'ensemble.

Détecter les références circulaires

Les fonctions récursives doivent faire attention aux structures de données circulaires qu'elles consommeraient. Les objetsWeakSets peuvent être utilisés pour ça :

js
// Appeler un callback sur ce qui est stocké dans un objetfunction execRecursively(fn, subject, _refs = new WeakSet()) {  // On évite une récursion infinie  if (_refs.has(subject)) {    return;  }  fn(subject);  if (typeof subject === "object" && subject) {    _refs.add(subject);    for (const key in subject) {      execRecursively(fn, subject[key], _refs);    }    _refs.delete(subject);  }}const toto = {  toto: "Toto",  truc: {    truc: "Truc",  },};toto.truc.machin = toto; // Référence circulaire !execRecursively((obj) => console.log(obj), toto);

Ici, on a un objetWeakSet qui est créé lors de la première exécution et qui est passé ensuite à chaque appel qui suit (via l'argument interne_refs).

Le nombre d'objets ou l'ordre de parcours n'a pas d'importance et un objetWeakSet est donc plus adapté (y compris en termes de performances) qu'unSet, notamment si un grand nombre d'objets sont concernés.

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-weakset-objects

Compatibilité des navigateurs

Voir aussi

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2025 Movatter.jp