4 min read
•Question 28 of 50hardWhat 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 removedWeakSet
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 collectedComparison
| Feature | Map/Set | WeakMap/WeakSet |
|---|---|---|
| Key/Value types | Any | Objects only |
| Garbage collection | Prevents | Allows |
| Iterable | Yes | No |
| size property | Yes | No |
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
}