Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

427
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda