Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
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 objet WeakSet est une collection de valeurs pouvant être collectées par le ramasse-miette (garbage collector en anglais), incluant des objets et des symboles non enregistrés. Une valeur dans le WeakSet ne peut apparaître qu'une seule fois. Elle est unique dans la collection du WeakSet.
Les valeurs d'un WeakSet doivent pouvoir être collectées par le ramasse-miette. La plupart des types 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 les symboles non enregistrés peuvent être stockés car ils sont collectables par le ramasse-miette.
Les principales différences avec l'objet Set sont :
Les WeakSet sont des collections uniquement d'objets et de symboles. Ils ne peuvent pas contenir des valeurs de n'importe quel type, contrairement aux Set.
Le WeakSet est faible, ce qui signifie que les références aux objets dans un WeakSet sont maintenues faiblement. Si aucune autre référence à une valeur stockée dans le WeakSet 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. Les WeakSet ne sont pas énumérables.
Comme pour un Set, l'égalité des valeurs est basée sur l'algorithme SameValueZero, qui est équivalent à l'opérateur === car un WeakSet 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 par référence, et non par valeur.
Crée un nouvel objet WeakSet.
Ces propriétés sont définies sur le WeakSet.prototype et partagées par toutes les instances de WeakSet.
WeakSet.prototype.constructorLa fonction constructeur qui a créé l'objet instance. Pour les instances de WeakSet, la valeur initiale est le constructeur WeakSet.
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 dans Object.prototype.toString().
Ajoute valeur à l'ensemble WeakSet.
WeakSet.prototype.delete()Retire valeur de l'ensemble WeakSet. Suite à cette opération, WeakSet.prototype.has(valeur) renverra false.
WeakSet.prototype.has()Retourne un booléen indiquant si valeur est (ou non) au sein de l'ensemble WeakSet.
On notera que toto !== truc. Bien que ce soient des objets similaires, ce ne sont pas les mêmes objets. Aussi, les deux sont ajoutés à l'ensemble.
Les fonctions récursives doivent faire attention aux structures de données circulaires qu'elles consommeraient. Les objets WeakSets peuvent être utilisés pour ça :
Ici, on a un objet WeakSet 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 objet WeakSet est donc plus adapté (y compris en termes de performances) qu'un Set, notamment si un grand nombre d'objets sont concernés.
| ECMAScript® 2027 Language Specification # sec-weakset-objects |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 6 oct. 2025 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.