Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnología web para desarrolladores
  2. JavaScript
  3. Referencia de JavaScript
  4. Objetos globales
  5. WeakSet

Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.

View in EnglishAlways switch to English

WeakSet

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨septiembre de 2015⁩.

* Some parts of this feature may have varying levels of support.

El objetoWeakSet te permite almacenarobjetos débiles en una colección.

Descripción

Los objetosWeakSet son colecciones de objetos. Al igual queSet,cada objectoWeakSet puede estar solo una vez; todos los objetos en una colecciónWeakSet son unicos.

Las principales diferencias con el objetoSet son:

  • WeakSet son colecciones deobjetos solamente. No pueden contener valores arbitrarios de cualquier tipo, como pueden hacerlo losSet.

  • ElWeakSet esdébil, lo que significa que las referencias a objectos en unWeakSet se mantienendébilmente. Si no existen otras referencias a un objecto almacenado enWeakSet, 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. LosWeakSets no son enumerables.

Caso de uso: Detección de referencias circulares

Las funciones que se llaman recursivamente necesitan una forma deprotección contra las estructuras de datos circulares mediante el seguimientode los objetos que ya se han procesado.

LosWeakSet son ideales para este propósito:

js
// Ejecuta una devolución de llamada en todo lo almacenado dentro de un objetofunction 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 unWeakSet en la primera ejecución, y es pasado con cada llamadade función subsiguiente (usando el parámetro interno_refs).

El número de objetos o su orden de recorrido es irrelevante, por lo que unWeakSetes más adecuado (y eficaz) que unSet para rastrear referencias deobjetos, especialmente si hay una gran cantidad de objetos involucrados.

Constructor

WeakSet()

Crea un nuevo objetoWeakSet.

Métodos de instancia

WeakSet.prototype.add(value)

Añadevalor al objetoWeakSet.

WeakSet.prototype.delete(value)

Eliminavalue delWeakSet.WeakSet.prototype.has(value) devolveráfalse después.

WeakSet.prototype.has(value)

Devuelve un valor booleano que afirma sivalue está presente en el objetoWeakSet 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); // truews.has(bar); // truews.delete(foo); // elimina foo del conjuntows.has(foo); // false, foo ha sido eliminadows.has(bar); // true, bar se mantiene

Tenga en cuenta quefoo !== bar. Si bien son objetos similares,no sonel mismo objeto. Y así ambos se añaden al conjunto.

Especificaciones

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

Compatibilidad con navegadores

Véase también

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp