Movatterモバイル変換


[0]ホーム

URL:


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

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

WeakMap

Baseline Widely available *

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

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

El objetoWeakMap es una colección de pares llave/valor en la que las llavesdeben ser objetos con valores de cualquiertipo de dato en JavaScript,y el cual no crea fuertes referencias a sus llaves.Es decir, la presencia de un objeto como llave en unWeakMap no evita que elobjeto sea recolectado como basura. Una vez que se ha recopilado un objetoutilizado como llave, sus valores correspondientes en cualquierWeakMap seconvierten en candidatos para la recolección de basura — siempre y cuando no seles mencione fuertemente en otros lugares.

WeakMap permite asociar datos a objectos de una manera que no impide que serecopilen los objectos llaves, incluso si los valores hacen referencia a las llaves.Sin embargo, unWeakMap no permite observar la vitalidad de sus llaves, por loque no permite la enumeración; Si unWeakMap expusiera algún método para obteneruna lista de sus llaves, la lista dependería del estado de la recolección de basura,introduciendo indeterminismo. Si quieres una lista de llaves,se debe usar unMap en lugar de unWeakMap.

Puedes aprender más acerca deWeakMap en la sección deobjeto WeakMapde la guíacolecciónes con llaves

Descripción

Las llaves de los WeakMaps solamente pueden ser del tipoObject. LosPrimitive data types como claves no están permitidos (ej. unSymbol no pueden ser una clave deWeakMap).

¿Por qué WeakMap?

Una API de mapeopodría ser implementada en JavaScript con dos arreglos (uno para las llaves, otro para los valores) compartidos por los cuatro métodos de la API.Establecer elementos en este mapa implicaría colocar una llave y valor al final de cada uno de los arreglos simultáneamente.Como resultado, los índices de la llave y el valor corresponderían a ambas matrices.Obtener valores del mapa implicaría iterar a través de todas las llaves hasta encontrar una coincidencia, luego usar el índice de esta coincidencia para recuperar el valor correspondiente del arreglo de valores.

Tal implementación tendría dos inconvenientes principales:

  1. El primero es una búsquedaO(n) (siendon el número de claves en el mapa) ya que ambas operaciones deben iterar a través de la lista de llaves para encontrar un valor coincidente.
  2. El segundo inconveniente es un problema de pérdida de memoria por que los arreglos se aseguran que las referencias a cada llave y cada valor se mantengan indefinidamente. Estas referencias evitan que las llaves se recopilen como basura, incluso si no hay otras referencias al objeto. Esto también evitaría que los valores correspondientes se recopilen como basura.

Por el contrario, en unWeakMap, un objeto llave se refiere fuertemente a su contenido siempre que la llave no se recolecte como basura, pero débilmente a partir de ese momento. Como tal, unWeakMap:

  • No evita la recolección de elementos no utilizados, lo que eventualmente elimina las referencias a la llave del objeto.
  • Permite la recolección de basura de cualquier valor si no se hace referencia a sus objectos llave desde otro lugar que no sea unWeakMap.

WeakMap puede ser una construcción particularmente útil cuando se asignan llaves a información sobre la llave que es valiosasolo si la llave no ha sido recolectada como basura.

Pero debido a que unWeakMap no permite observar la vida de sus llaves, sus llaves no son enumerables. No existe ningún método para obtener una lista de las llaves. Si lo hubiera, la lista dependería del estado de recolección de basura, introduciendo indeterminismo. Si desea tener una lista de llaves, debe usarMap.

Constructor

WeakMap()

Crea un nuevo objetoWeakMap.

Métodos de instanciación

WeakMap.prototype.delete(key)

Elimina cualquier valor asociado a lakey.WeakMap.prototype.has(key) regresaráfalse después.

WeakMap.prototype.get(key)

Regresa el valor asociado a lakey, oundefined si no hay ninguno.

WeakMap.prototype.has(key)

Devuelve un valor booleano que afirma si se ha asociado un valor a lakey en el objetoWeakMap o no.

WeakMap.prototype.set(key,value)

Establece elvalue para lakey en el objetoWeakMap. Devuelve el objetoWeakMap.

Ejemplos

Usando WeakMap

js
const wm1 = new WeakMap(),  wm2 = new WeakMap(),  wm3 = new WeakMap();const o1 = {},  o2 = function () {},  o3 = window;wm1.set(o1, 37);wm1.set(o2, "azerty");wm2.set(o1, o2); // El valor puede ser cualquier cosa, incluyendo un objeto o una funciónwm2.set(o3, undefined);wm2.set(wm1, wm2); // Las llaves y los valores pueden ser cualquier objeto. ¡Incluso WeakMaps!wm1.get(o2); // "azerty"wm2.get(o2); // undefined, porque no hay llave para `o2` en `wm2`wm2.get(o3); // undefined, porque ese es el valor estabecidowm1.has(o2); // truewm2.has(o2); // falsewm2.has(o3); // true (incluso si el valor en sí es 'undefined')wm3.set(o1, 37);wm3.get(o1); // 37wm1.has(o1); // truewm1.delete(o1);wm1.has(o1); // false

Implementando una clase tipo-WeakMap con el método .clear()

js
class ClearableWeakMap {  constructor(init) {    this._wm = new WeakMap(init);  }  clear() {    this._wm = new WeakMap();  }  delete(k) {    return this._wm.delete(k);  }  get(k) {    return this._wm.get(k);  }  has(k) {    return this._wm.has(k);  }  set(k, v) {    this._wm.set(k, v);    return this;  }}

Especificaciones

Specification
ECMAScript® 2026 Language Specification
# sec-weakmap-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