In JavaScript, standard Map and Set collections hold strong references to their entries. If an object is placed inside a Map, the garbage collector cannot reclaim it, even if all other references to it have been destroyed. WeakMap and WeakSet hold weak references, allowing objects to be garbage-collected cleanly and preventing memory leaks.
1. Strong References vs. Weak References
Output
1Standard Map (Strong Reference):
2 [ DOM Button ] ◄─── Held strongly by Map key!
3 ▲
4 btn = null; <── Button is NOT collected because Map holds it alive! (Memory Leak!)
5
6WeakMap (Weak Reference):
7 [ DOM Button ] < - - Weak Reference from WeakMap
13// The button and its count are AUTOMATICALLY garbage-collected! Zero memory leak!
2. True Private Data in Classes (Pre-ES2022 Pattern)
JavaScript
1const privateData =newWeakMap();
2
3classSecureUser{
4constructor(secret){
5// Store secret mapped weakly to 'this' instance
6 privateData.set(this,{ secret });
7}
8
9getSecret(){
10return privateData.get(this).secret;
11}
12}
4. WeakSet: Unique Object Tracking
WeakSet stores a collection of weakly held objects. It is ideal for tagging objects or tracking "visited" status in graph traversals without altering the objects:
JavaScript
1const visitedNodes =newWeakSet();
2
3functiontraverseGraph(node){
4if(visitedNodes.has(node)){
5 console.log('Cycle detected or already processed:', node.id);