If youβre serious about modern JavaScript, you must understand
Map, Set, WeakMap, and WeakSet.
They solve real problems that Object and Array couldnβt β especially around performance, memory, and data safety.
π¦ Map()
β
What is Map?
Map is a built-in JavaScript data structure that stores keyβvalue pairs, just like objects, but way more powerful.
const user = new Map([
['name', 'md fahim'],
['age', 22],
[99, true],
]);
π€ Why does Map exist?
Objects had limitations:
β Keys were mostly strings
β Order wasnβt guaranteed (older JS)
β No easy way to know the size
Map fixes all of that.
π Core Map Methods
// Add or update
user.set('country', 'Bangladesh');
user.set('age', 23);
// Get value
user.get('name'); // 'md fahim'
user.get(99); // true
// Check existence
user.has('email'); // false
// Delete key
user.delete(99);
// Clear all
user.clear();
// Size
user.size;
π Looping Through a Map
β
for...of (BEST)
for (const [key, value] of user) {
console.log(key, value);
}
keys()
for (const key of user.keys()) {
console.log(key);
}
values()
for (const value of user.values()) {
console.log(value);
}
entries() (default)
for (const [key, value] of user.entries()) {
console.log(key, value);
}
forEach()
user.forEach((value, key) => {
console.log(key, value);
});
β οΈ Order is (value, key) β opposite of Object
π§ Important Rule: Keys Are Compared by Reference
const obj = { id: 1 };
const map = new Map();
map.set(obj, 'data');
map.get({ id: 1 }); // β undefined
map.get(obj); // β
'data'
β Common Map Mistakes
β Dot notation
user.name // β
β
Correct
user.get('name');
β This wonβt work
user.keys().forEach(); // β
β
Do this
for (const key of user.keys()) {}
π Convert Between Map & Object
Map β Object
const obj = Object.fromEntries(user);
Object β Map
const map = new Map(Object.entries(obj));
Map β Array
console.log([...map]);
console.log(Array.from(map));
π© Set()
β
What is Set?
A Set stores unique values only.
const numbers = new Set([1, 2, 3, 3, 4]);
console.log(numbers); // {1,2,3,4}
π Core Set Methods
set.add(1);
set.has(1); // true
set.delete(1);
set.clear();
set.size;
π Looping a Set
for...of (BEST)
for (const value of set) {
console.log(value);
}
forEach()
set.forEach(value => {
console.log(value);
});
values() / keys()
set.values();
set.keys(); // same as values
π§ How Set Checks Uniqueness
Primitive values
new Set([1, 1, '1']); // {1, '1'}
Objects (REFERENCE-based)
const a = { x: 1 };
const b = { x: 1 };
const set = new Set([a, b]);
console.log(set.size); // 2
β Common Set Mistakes
set[0]; // β undefined
β Sets are not indexed
π₯ Real-Life Use Cases
Remove duplicates
[...new Set([1,2,2,3])];
Fast permission check
const roles = new Set(['admin', 'editor']);
roles.has('admin');
π¨ WeakMap()
π§ Mental Model
βThis data belongs to the object.
If the object dies, the data should die too.β
Rules
β Keys must be objects
β Weakly referenced
β Auto garbage collection
β No iteration
Example: Private Data
const privateData = new WeakMap();
class User {
constructor(name, password) {
privateData.set(this, { password });
this.name = name;
}
checkPassword(pass) {
return privateData.get(this).password === pass;
}
}
π§Ή Garbage Collection Magic
let user = { id: 1 };
const wm = new WeakMap();
wm.set(user, 'secret');
user = null; // auto cleanup
πͺ WeakSet()
π§ Mental Model
βI just want to know if Iβve seen this object before.β
Rules
β Objects only
β No duplicates
β Auto cleanup
β No iteration
Example: Tracking Objects
const visited = new WeakSet();
function process(obj) {
if (visited.has(obj)) return;
visited.add(obj);
console.log('Processing...');
}
Top comments (0)