| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/WeakSet | [Back] [Original] |
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 bnficier de prise en charge variables.
Un objet WeakSet est une collection de valeurs pouvant tre collectes par le ramasse-miette (garbage collector en anglais), incluant des objets et des symboles non enregistrs. Une valeur dans le WeakSet ne peut apparatre qu'une seule fois. Elle est unique dans la collection du WeakSet.
Les valeurs d'un WeakSet doivent pouvoir tre collectes par le ramasse-miette. La plupart des types de donnes primitives peuvent tre cres arbitrairement et n'ont pas de dure de vie, elles ne peuvent donc pas tre stockes. Les objets et les symboles non enregistrs peuvent tre stocks car ils sont collectables par le ramasse-miette.
Les principales diffrences 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 rfrences aux objets dans un WeakSet sont maintenues faiblement. Si aucune autre rfrence une valeur stocke dans le WeakSet n'existe, ces valeurs peuvent tre collectes par le ramasse-miette.
Note :
Cela signifie galement qu'il n'existe pas de liste des valeurs actuellement stockes dans la collection. Les WeakSet ne sont pas numrables.
Comme pour un Set, l'galit des valeurs est base sur l'algorithme SameValueZero, qui est quivalent l'oprateur === car un WeakSet ne peut contenir que des objets et des symboles. Cela signifie que pour les objets, l'galit est base sur l'identit de l'objet. Ils sont compars par rfrence, et non par valeur.
WeakSet()Cre un nouvel objet WeakSet.
Ces proprits sont dfinies sur le WeakSet.prototype et partages 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 proprit [Symbol.toStringTag] est la chane de caractres "WeakSet". Cette proprit est utilise dans Object.prototype.toString().
WeakSet.prototype.add()Ajoute valeur l'ensemble WeakSet.
WeakSet.prototype.delete()Retire valeur de l'ensemble WeakSet. Suite cette opration, WeakSet.prototype.has(valeur) renverra false.
WeakSet.prototype.has()Retourne un boolen indiquant si valeur est (ou non) au sein de l'ensemble WeakSet.
WeakSetconst ws = new WeakSet();
const toto = {};
const truc = {};
ws.add(toto);
ws.add(truc);
ws.has(toto); // true
ws.has(truc); // true
ws.delete(toto); // retire toto de l'ensemble
ws.has(toto); // false, toto a t enlev
ws.has(truc); // toujours true
On notera que toto !== truc. Bien que ce soient des objets similaires, ce ne sont pas les mmes objets. Aussi, les deux sont ajouts l'ensemble.
Les fonctions rcursives doivent faire attention aux structures de donnes circulaires qu'elles consommeraient. Les objets WeakSets peuvent tre utiliss pour a :
// Appeler un callback sur ce qui est stock dans un objet
function execRecursively(fn, subject, _refs = new WeakSet()) {
// On vite une rcursion 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; // Rfrence circulaire !
execRecursively((obj) => console.log(obj), toto);
Ici, on a un objet WeakSet qui est cr lors de la premire excution 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 concerns.
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-weakset-objects |
Cette page a t modifie le 6 oct. 2025 par les contributeurices du MDN.
WeakSetObject/FunctionObject.prototype.__defineGetter__()Object.prototype.__defineSetter__()Object.prototype.__lookupGetter__()Object.prototype.__lookupSetter__()Object.prototype.hasOwnProperty()Object.prototype.isPrototypeOf()Object.prototype.propertyIsEnumerable()Object.prototype.toLocaleString()Object.prototype.toString()Object.prototype.valueOf()Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |