From 17c442ac8612f03737174ddb1e2123b94e0f4372 Mon Sep 17 00:00:00 2001 From: Juan Vásquez Date: Tue, 15 Feb 2022 13:24:11 -0600 Subject: 19. web/javascript/reference/global_objects/weakset/index.html [ES] (#4148) * 19. web/javascript/reference/global_objects/weakset/index.html [ES] - [x] Change from HTML to MD - [x] Sync content Closes #4136 * Apply suggestions from code review Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: David Brito <39559632+davbrito@users.noreply.github.com> Co-authored-by: Alexander Co-authored-by: Anderson Vallejo <48649209+Vallejoanderson@users.noreply.github.com> Co-authored-by: David Brito <39559632+davbrito@users.noreply.github.com> Co-authored-by: Alexander --- .../reference/global_objects/weakset/index.html | 228 --------------------- .../reference/global_objects/weakset/index.md | 116 +++++++++++ 2 files changed, 116 insertions(+), 228 deletions(-) delete mode 100644 files/es/web/javascript/reference/global_objects/weakset/index.html create mode 100644 files/es/web/javascript/reference/global_objects/weakset/index.md (limited to 'files/es/web/javascript') diff --git a/files/es/web/javascript/reference/global_objects/weakset/index.html b/files/es/web/javascript/reference/global_objects/weakset/index.html deleted file mode 100644 index b259b82030..0000000000 --- a/files/es/web/javascript/reference/global_objects/weakset/index.html +++ /dev/null @@ -1,228 +0,0 @@ ---- -title: WeakSet -slug: Web/JavaScript/Reference/Global_Objects/WeakSet -translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet -original_slug: Web/JavaScript/Referencia/Objetos_globales/WeakSet ---- -
{{JSRef}}
- -

El objeto WeakSet  te deja almacenar y mantener objectos debilmente en una colección.

- -

Sintaxis

- -
 new WeakSet([iterable]);
- -

Parametros

- -
-
iterable
-
Si un  objeto interable es pasado, todos sus elementos se agregarán al nuevo WeakSet. null es tratado como undefined.
-
- -

Descripción

- -

 

- -

Los objetos WeakSet son colecciones de objetos. Un objecto en WeakSet solo puede ser agregado una vez; Esto quiere decir que es unico en la coleccion WeakSet.

- -

Las principales diferencias con el objeto {{jsxref("Set")}} son:

- -
    -
  • A diferencia de  Sets, WeakSets  son solamente colecciones de objetos y no contienen valores arbitrarios de cualquier otro tipo.
  • -
  • El WeakSet  es débil: Las referencias a objetos en la colección se mantienen débilmente.. Si ya no hay otra referencia a un objeto almacenado en el  WeakSet, ellos pueden ser removidos por el recolector de basura. Esto también significa que no hay ninguna lista de objetos almacenados en la colección. Los WeakSets no son enumerables.
  • -
- -

Properties

- -
-
WeakSet.length
-
El valor de la propiedad length  es 0.
-
{{jsxref("WeakSet.prototype")}}
-
Representa el prototipo para el constructor Set . Permite la adición de propiedades a todos los objetos WeakSet
-
- -

WeakSet instances

- -

Todas las instancias a WeakSet son heredadas de {{jsxref("WeakSet.prototype")}}.

- -

Propiedades

- -

{{page('en-US/Web/JavaScript/Reference/Global_Objects/WeakSet/prototype','Properties')}}

- -

Métodos

- -

{{page('en-US/Web/JavaScript/Reference/Global_Objects/WeakSet/prototype','Methods')}}

- -

Ejemplos

- -

Usando el objetoWeakSet 

- -
var ws = new WeakSet();
-var obj = {};
-var foo = {};
-
-ws.add(window);
-ws.add(obj);
-
-ws.has(window); // true
-ws.has(foo);    // false, foo no fue agregado al conjunto
-
-ws.delete(window); // elimina window del conjunto
-ws.has(window);    // false, window fue eliminado
-
- -

Especificaciónes

- - - - - - - - - - - - - - - - - - - -
SpecificationStatusComment
{{SpecName('ES2015', '#sec-weakset-objects', 'WeakSet')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-weakset-objects', 'WeakSet')}}{{Spec2('ESDraft')}} 
- -

Compatibilidad de navegadores

- -

{{CompatibilityTable}}

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support{{CompatChrome(36)}}12{{ CompatGeckoDesktop(34) }}{{CompatNo}}{{ CompatOpera(23) }}{{CompatSafari(9)}}
new WeakSet(iterable)3812{{ CompatGeckoDesktop(34) }}{{CompatNo}}25{{CompatSafari(9)}}
Constructor argument: new WeakSet(null){{CompatVersionUnknown}}12{{CompatGeckoDesktop("37")}}{{CompatNo}}{{CompatUnknown}}{{CompatSafari(9)}}
Monkey-patched add() in Constructor{{CompatVersionUnknown}}12{{CompatGeckoDesktop("37")}}{{CompatNo}}{{CompatUnknown}}{{CompatSafari(9)}}
Obsolete clear() method removed{{CompatChrome(43)}}12{{CompatGeckoDesktop(46)}}{{CompatNo}}{{CompatOpera(30)}}{{CompatSafari(9)}}
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FeatureAndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support{{CompatNo}}{{CompatVersionUnknown}}{{ CompatGeckoMobile(34) }}{{CompatNo}}{{CompatNo}}9
new WeakMap(iterable){{CompatNo}}{{CompatVersionUnknown}}{{ CompatGeckoMobile(34) }}{{CompatNo}}{{CompatNo}}9
Constructor argument: new WeakSet(null){{CompatUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatUnknown}}9
Monkey-patched add() in Constructor{{CompatUnknown}}{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{CompatNo}}{{CompatUnknown}}9
Obsolete clear() method removed{{CompatNo}}{{CompatVersionUnknown}}{{CompatUnknown}}{{CompatNo}}{{CompatUnknown}}9
-
- -

Tambien ver

- -
    -
  • {{jsxref("Map")}}
  • -
  • {{jsxref("Set")}}
  • -
  • {{jsxref("WeakMap")}}
  • -
diff --git a/files/es/web/javascript/reference/global_objects/weakset/index.md b/files/es/web/javascript/reference/global_objects/weakset/index.md new file mode 100644 index 0000000000..6cbe535f7e --- /dev/null +++ b/files/es/web/javascript/reference/global_objects/weakset/index.md @@ -0,0 +1,116 @@ +--- +title: WeakSet +slug: Web/JavaScript/Reference/Global_Objects/WeakSet +translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet +original_slug: Web/JavaScript/Referencia/Objetos_globales/WeakSet +browser-compat: javascript.builtins.WeakSet +--- +{{JSRef}} + +El objeto **`WeakSet`** te permite almacenar _objectos_ débiles en una colección. + +## Descripción + +Los objetos `WeakSet` son colecciones de objetos. Al igual que {{jsxref("Set")}}, +cada objecto `WeakSet` puede estar solo una vez; todos los objetos en una colección `WeakSet` son unicos. + +Las principales diferencias con el objeto {{jsxref("Set")}} son: + +- `WeakSet` son colecciones de **objetos solamente**. No pueden contener valores arbitrarios de cualquier tipo, como pueden hacerlo los {{jsxref("Set")}}. +- El `WeakSet` es _débil_, lo que significa que las referencias a objectos en un `WeakSet` se mantienen _débilmente_. Si no existen otras referencias a un objecto almacenado en `WeakSet`, esos objectos pueden ser recolectados como basura. + + > **Nota:** Esto también significa que no hay una lista de objectos actuales almacenados en la colección. Los `WeakSets` no son enumerables. + +### Caso de uso: Detección de referencias circulares + +Las funciones que se llaman recursivamente necesitan una forma de +protección contra las estructuras de datos circulares mediante el seguimiento +de los objetos que ya se han procesado. + +Los `WeakSet` son ideales para este propósito: + +```js +// Ejecuta una devolución 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 ejecución, y es pasado con cada llamada +de función subsiguiente (usando el parámetro interno `_refs`). + +El número de objetos o su orden de recorrido es irrelevante, por lo que un `WeakSet` +es más adecuado (y eficaz) que un {{jsxref("Set")}} para rastrear referencias de +objetos, especialmente si hay una gran cantidad de objetos involucrados. + +## Constructor + +- {{jsxref("WeakSet/WeakSet", "WeakSet()")}} + - : Crea un nuevo objeto `WeakSet`. + +## Métodos de instancia + +- {{jsxref("WeakSet.add", "WeakSet.prototype.add(value)")}} + - : Añade `valor` al objeto `WeakSet`. +- {{jsxref("WeakSet.delete", "WeakSet.prototype.delete(value)")}} + - : Elimina `value` del `WeakSet`. `WeakSet.prototype.has(value)` devolverá `false` después. +- {{jsxref("WeakSet.has", "WeakSet.prototype.has(value)")}} + - : Devuelve un valor booleano que afirma si `value` está presente en el objeto `WeakSet` o no. + +## Ejemplos + +### Usando el objeto WeakSet + +```js +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 añaden al conjunto. + +## Especificaciones + +{{Specifications}} + +## Compatibilidad con navegadores + +{{Compat}} + +## Véase también + +- [Polyfill de `WeakSet` en `core-js`](https://github.com/zloirock/core-js#weakset) +- {{jsxref("Map")}} +- {{jsxref("Set")}} +- {{jsxref("WeakMap")}} + -- cgit v1.2.3-54-g00ecf