¿Cuál es la diferencia entre Map y WeakMap en JavaScript?

En este artículo, hablaremos sobre la diferencia entre Map y WeakMap que presenta ES6. El objeto Javascript solo admite un objeto clave. Para admitir múltiples objetos clave, Then Map viene en este camino. 

Mapa: Un Mapa es una lista desordenada de pares clave-valor donde la clave y el valor pueden ser de cualquier tipo como string, booleano, número, etc. Para una mejor comprensión, tomamos un ejemplo de Mapa y sus propiedades.

Ejemplo:

Javascript

<script>
  
    // Creating an empty map
    const myMap = new Map();
  
    // Creating a set by inserting the key-value pair
    console.log(myMap);
      
    myMap.set("info", { name: "Sam", age: 36 });
      
    // Access the elements of a Map
    console.log(myMap);
      
    console.log(myMap.get("info"));
  
    // Checking the element in a Map using has() method
    console.log("check whether info is there or not - "
            + myMap.has("info"));
  
    // Returning the number of elements using size property
    console.log("The no.of elements in a Map are " + myMap.size);
  
    // Removing the element from the map using
    // clear() and delete() methods
    // removing a particular element
    myMap.delete("address");
  
    myMap.delete("info"); // true
    console.log(myMap);
  
    // Iteration through the map
    // using forEach method()
    const map2 = new Map();
    map2.set("name", "Sam");
    map2.set("age", "36");
  
    // looping through Map
    map2.forEach(function (value, key) {
        console.log(key + "- " + value);
    });
</script>

Producción:

La salida del código anterior (Mapa)

WeakMap: en un mapa débil, cada tecla solo puede ser un objeto y una función. Solía ​​​​almacenar referencias de objetos débiles. Para una mejor comprensión, tomamos un ejemplo de WeakMap y sus propiedades:

Ejemplo:

Javascript

<script>
  
    // Creating a WeakMap
    const myweakMap = new WeakMap();
    console.log(myweakMap); // WeakMap {} 
  
    let obj = {};
  
    // Adding object (element) to WeakMap
    myweakMap.set(obj, 'hello everyone');
  
    console.log(myweakMap);
  
    // Access the element of a WeakMap using get() method
    console.log("The element of a WeakMap - " + myweakMap.get(obj));
  
    // Checking the element in a map using has() method
    console.log("check if an element is present in WeakMap - "
        + myweakMap.has(obj));
  
    // Delete the element of WeakMap using delete() method
    console.log("deleting the element of WeakMap - "
        + myweakMap.delete(obj));
    console.log(myweakMap); // WeakMap {}
  
    // WeakMaps are not iterable. It will return
    // an error. For example,
    const weakMap1 = new WeakMap();
    console.log(weakMap1); // WeakMap {} 
    let obj1 = {};
  
    // Adding object (element) to WeakMap
    weakMap.set(obj1, 'hello');
      
    // Looping through WeakMap
    for (let i of weakMap1) {
  
        console.log(i);  // TypeError
    }
</script>

Producción:

La salida del código anterior (WeakMap)

Diferencia entre mapa y mapa débil:

Mapa

Mapa débil

Un mapa es una lista desordenada de pares clave-valor donde la clave y el valor pueden ser de cualquier tipo, como string, booleano, número, etc. En un mapa débil, cada tecla solo puede ser un objeto y una función. Solía ​​​​almacenar referencias de objetos débiles.
Los mapas son iterables. WeakMaps no son iterables.
Los mapas guardarán todo incluso si no los usas. WeakMaps contiene la referencia a la clave, no la clave en sí.
El recolector de basura no elimina un puntero clave del «Mapa» y tampoco elimina la clave de la memoria. El recolector de basura continúa y elimina el puntero clave de «WeakMap» y también elimina la clave de la memoria. WeakMap permite que el recolector de basura haga su tarea pero no el Mapa.
Los mapas tienen algunas propiedades: .set, .get, .delete, .size, .has, .forEach, Iterators. WeakMaps tiene algunas propiedades: .set, .get, .delete, .has.
Puede crear un nuevo mapa usando un nuevo Map() . Puede crear un nuevo WeakMap usando un nuevo WeakMap() .

Publicación traducida automáticamente

Artículo escrito por deekshashukla03102001 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *