Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

420
Vistas
¿Por qué en WeakMap la clave y el valor no se eliminan cuando muestra la colección completa, pero se eliminan cuando muestra un elemento?

Ejemplo con valor "anulado". ¿Por qué el elemento todavía existe en la colección WeakMap en este caso?

 let weakMap = new WeakMap(); let obj = {name: 'Ivan'}; //adding some new element weakMap.set({}, obj); obj = null; console.log(weakMap); console.log(weakMap.get({}));

colección completa

ingrese la descripción de la imagen aquí

un elemento

ingrese la descripción de la imagen aquí

Ejemplo con la tecla "anular":

ingrese la descripción de la imagen aquí

¿Que está pasando aqui? ¿De qué viene? ¿El recolector de basura no tiene tiempo para limpiar todo o qué?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

En primer lugar weakMap.set({}, obj); y weakMap.get({}); nunca se referirá al mismo elemento en WeakMap porque son literales de objetos anónimos separados. Para que WeakMap sea útil, debe almacenar una referencia al objeto que se utilizará como clave 1 .

 let weakMap = new WeakMap(); let obj = {name: 'Ivan'}; weakMap.set({}, obj); console.log('has anonymous key:', weakMap.has({})); console.log(weakMap.get({})); let key = {}; weakMap.set(key, obj); console.log('has assigned key:', weakMap.has(key)); console.log(weakMap.get(key));

En segundo lugar, es la clave a la que se hace referencia débilmente en WeakMap, no el valor, por lo que establecer el valor en null no tendrá ningún efecto en WeakMap. En su lugar, debe 'anular' la clave 2 (otra razón por la que necesita una referencia almacenada).

 let weakMap = new WeakMap(); let obj = { name: 'Ivan' }; let key = {}; weakMap.set(key, obj); console.log(weakMap); key = null; // no good way to indicate this, but debugging in the console will reveal an empty WeakMap pending garbage collection console.log(weakMap);


1 Su ejemplo que usa un objeto inalcanzable como clave desaparecerá del WeakMap en la recolección de elementos no utilizados, pero no porque establezca obj=null sino porque la única referencia al objeto existe en el WeakMap.

2 No hay una buena forma de demostrar el comportamiento del segundo fragmento porque, según la documentación, "... un WeakMap no permite observar la actividad de sus claves, sus claves no son enumerables". No obstante, la depuración en la consola revelará el comportamiento, aunque de manera incómoda dada la variedad de formas en que los diferentes navegadores tratan los objetos en la consola, es decir. Objetos vivos de Chrome.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda