Day 27

Symbol & WeakMap

10 min
JavaScript 100 Days

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.

symbol.js
javascript
// 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.js
javascript
// 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.