#1 Data Analytics Program in India
₹2,499₹1,499Enroll Now
4 min read
Question 28 of 50hard

What are WeakMap and WeakSet?

Understanding weak references in JavaScript.

What You'll Learn

  • Weak references
  • Memory management
  • Use cases

WeakMap

Like Map, but keys must be objects and are weakly held.

code.jsJavaScript
const weakMap = new WeakMap();
let obj = { name: 'John' };

weakMap.set(obj, 'some data');
weakMap.get(obj); // 'some data'

obj = null; // Object can be garbage collected
// WeakMap entry is also removed

WeakSet

Like Set, but values must be objects and are weakly held.

code.jsJavaScript
const weakSet = new WeakSet();
let obj = { id: 1 };

weakSet.add(obj);
weakSet.has(obj); // true

obj = null; // Object can be garbage collected

Comparison

FeatureMap/SetWeakMap/WeakSet
Key/Value typesAnyObjects only
Garbage collectionPreventsAllows
IterableYesNo
size propertyYesNo

Use Cases

code.jsJavaScript
// Private data
const privateData = new WeakMap();

class User {
  constructor(name) {
    privateData.set(this, { name });
  }

  getName() {
    return privateData.get(this).name;
  }
}

// Caching
const cache = new WeakMap();

function process(obj) {
  if (!cache.has(obj)) {
    cache.set(obj, expensiveOperation(obj));
  }
  return cache.get(obj);
}

// Tracking objects
const visited = new WeakSet();

function visit(obj) {
  if (visited.has(obj)) return;
  visited.add(obj);
  // Process object
}