Cả hai đều hoạt động khác nhau khi một đối tượng được tham chiếu bởi các keys / values của chúng bị xóa. Hãy lấy ví dụ dưới đây:
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);
})()
Khi IIFE ở trên được thực thi, chúng ta không có cách nào có thể tham chiếu đến {x: 12} và {y: 12} nữa. Trình thu gom rác sẽ hành động và xóa con trỏ khóa b khỏi “WeakMap” và cũng xóa {y: 12} khỏi bộ nhớ. Nhưng trong trường hợp “Map”, trình thu gom rác không xóa một con trỏ khỏi “Map” và cũng không xóa {x: 12} khỏi bộ nhớ.
WeakMap cho phép bộ thu gom rác thực hiện nhiệm vụ của nó nhưng Map thì không. Với các maps được viết tay, mảng các keys sẽ giữ các tham chiếu đến các đối tượng chính, ngăn chúng bị bộ thu gom rác thu thập. Trong WeakMaps, các tham chiếu đến các đối tượng chính được giữ "một cách yếu ớt", có nghĩa là chúng không ngăn chặn việc bị bộ thu gom rác thu thập trong trường hợp không có tham chiếu nào khác đến đối tượng.