Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

417
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!