| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/WeakSet | [Back] [Original] |
Get to know MDN better
Esta pgina ha sido traducida del ingls por la comunidad. Aprende ms y nete a la comunidad de MDN Web Docs.
This feature is well established and works across many devices and browser versions. Its been available across browsers since septiembre de 2015.
* Some parts of this feature may have varying levels of support.
El objeto WeakSet te permite almacenar objetos dbiles en una coleccin.
Los objetos WeakSet son colecciones de objetos. Al igual que Set,
cada objecto WeakSet puede estar solo una vez; todos los objetos en una coleccin WeakSet son unicos.
Las principales diferencias con el objeto Set son:
WeakSet son colecciones de objetos solamente. No pueden contener valores arbitrarios de cualquier tipo, como pueden hacerlo los Set.
El WeakSet es dbil, lo que significa que las referencias a objectos en un WeakSet se mantienen dbilmente. Si no existen otras referencias a un objecto almacenado en WeakSet, esos objectos pueden ser recolectados como basura.
Nota:
Esto tambin significa que no hay una lista de objectos actuales almacenados en la coleccin. Los WeakSets no son enumerables.
Las funciones que se llaman recursivamente necesitan una forma de proteccin contra las estructuras de datos circulares mediante el seguimiento de los objetos que ya se han procesado.
Los WeakSet son ideales para este propsito:
// Ejecuta una devolucin de llamada en todo lo almacenado dentro de un objeto
function execRecursively(fn, subject, _refs = null) {
if (!_refs) _refs = new WeakSet();
// Evita la recursividad infinita
if (_refs.has(subject)) return;
fn(subject);
if ("object" === typeof subject) {
_refs.add(subject);
for (let key in subject) execRecursively(fn, subject[key], _refs);
}
}
const foo = {
foo: "Foo",
bar: {
bar: "Bar",
},
};
foo.bar.baz = foo; // Referencia circular!
execRecursively((obj) => console.log(obj), foo);
Aqu, se crea un WeakSet en la primera ejecucin, y es pasado con cada llamada
de funcin subsiguiente (usando el parmetro interno _refs).
El nmero de objetos o su orden de recorrido es irrelevante, por lo que un WeakSet
es ms adecuado (y eficaz) que un Set para rastrear referencias de
objetos, especialmente si hay una gran cantidad de objetos involucrados.
WeakSet()Crea un nuevo objeto WeakSet.
WeakSet.prototype.add(value)Aade valor al objeto WeakSet.
WeakSet.prototype.delete(value)Elimina value del WeakSet. WeakSet.prototype.has(value) devolver false despus.
WeakSet.prototype.has(value)Devuelve un valor booleano que afirma si value est presente en el objeto WeakSet o no.
const ws = new WeakSet();
const foo = {};
const bar = {};
ws.add(foo);
ws.add(bar);
ws.has(foo); // true
ws.has(bar); // true
ws.delete(foo); // elimina foo del conjunto
ws.has(foo); // false, foo ha sido eliminado
ws.has(bar); // true, bar se mantiene
Tenga en cuenta que foo !== bar. Si bien son objetos similares,
no son el mismo objeto. Y as ambos se aaden al conjunto.
| Specification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-weakset-objects |
This page was last modified on 28 jul 2024 by MDN contributors.
WeakSetObject/FunctionYour blueprint for a better internet.
Portions of this content are 19982026 by individual mozilla.org contributors. Content available under a Creative Commons license.
| Web Proxy Viewer | New URL | Original Page |