Day 27 Symbol & WeakMap
Symbol ek unique primitive type hai — kabhi bhi do symbols equal nahi hote. WeakMap/WeakSet objects ke baare mein private data store karne ka memory-safe tarika hai jahan garbage collection properly kaam kare.
Symbol — Unique Identifiers
Symbol() se unique identifier banao. Object mein hidden/unique keys ke liye.
// Har Symbol unique hai
let s1 = Symbol("description");
let s2 = Symbol("description");
console.log(s1 === s2); // false! Always unique
// Object keys ke liye
const ID = Symbol("id");
const SECRET = Symbol("secret");
let user = {
name: "Zohaib",
[ID]: 123, // Symbol key
[SECRET]: "abc" // hidden from JSON
};
console.log(user[ID]); // 123
console.log(user.name); // "Zohaib"
console.log(JSON.stringify(user)); // {"name":"Zohaib"} — symbols hidden!
// Well-known symbols
class MyArray {
[Symbol.iterator]() {
// custom iteration logic
}
}
WeakMap & WeakSet
WeakMap mein keys sirf objects ho sakti hain. Keys weakly referenced hoti hain — garbage collected ho sakti hain.
// WeakMap — private data store karo
let privateData = new WeakMap();
class User {
constructor(name, password) {
this.name = name;
privateData.set(this, { password }); // private!
}
checkPassword(pass) {
return privateData.get(this).password === pass;
}
}
let user = new User("Zohaib", "secret123");
console.log(user.checkPassword("secret123")); // true
console.log(user.password); // undefined — private!
// WeakSet — object membership check
let visited = new WeakSet();
let pageObj = { url: "/home" };
visited.add(pageObj);
console.log(visited.has(pageObj)); // true
🎯 Practice Challenge
Symbol se unique ROLE constants banao (ADMIN, USER, GUEST). User objects mein role assign karo aur check karo.