Они ведут себя по-разному, когда объект, на который ссылаются их ключи / значения, удаляется. Давайте возьмем приведенный ниже пример кода:
var map = new Map();
var weakmap = new WeakMap();
(function(){
var a = {x: 12};
var b = {y: 12};
map.set(a, 1);
weakmap.set(b, 2);
})()
Вышеупомянутый IIFE выполняется, мы больше не можем ссылаться на {x: 12}
и {y: 12}
. Сборщик мусора идет вперед и удаляет указатель клавиши b из «WeakMap», а также удаляет {y: 12}
из памяти. Но в случае «Карты» сборщик мусора не удаляет указатель с «Карты», а также не удаляет {x: 12}
из памяти.
Резюме: WeakMap позволяет сборщику мусора выполнять свою задачу но не Карта.
Ссылки: http://qnimate.com/difference-between-map-and-weakmap-in-javascript/