🗝️
Array & Object Methods

Object Methods

Object.keys, values, entries
💡 Object.keys/values/entries ek filing cabinet ko teen alag tarikon se dekhna hai — sirf drawer labels (keys), sirf files ka content (values), ya dono ek saath (entries, label+content pairs).

Object.keys(obj) saari PROPERTY NAMES ka array deta hai. Object.values(obj) saari VALUES ka array. Object.entries(obj) [key, value] pairs ka array deta hai — for...of ke saath combine karke bahut clean iteration milta hai.

const person = { name: "Aarav", age: 20, city: "Mumbai" };

console.log(Object.keys(person));      // ["name", "age", "city"]
console.log(Object.values(person));    // ["Aarav", 20, "Mumbai"]
console.log(Object.entries(person));   // [["name","Aarav"], ["age",20], ["city","Mumbai"]]

// entries() + destructuring — bahut clean:
for (const [key, value] of Object.entries(person)) {
  console.log(key + ": " + value);
}

// Objects par array methods bhi indirectly use ho sakte hain:
const upperKeys = Object.keys(person).map(k => k.toUpperCase());
console.log(upperKeys);   // ["NAME", "AGE", "CITY"]
🗝️
Object.keys/values/entries ek filing cabinet ko teen alag tarikon se dekhna hai — sirf drawer labels (keys), sirf files ka content (values), ya dono ek saath (entries, label+content pairs).
1 / 2
⚡ झट से Recap
  • Object.keys() = property names array, Object.values() = values array
  • Object.entries() = [key,value] pairs — for...of ke saath clean iteration
  • for...in se zyada predictable — sirf own properties
इस page में (2 subtopics)

Object.freeze() object ko "immutable" bana deta hai — properties add/remove/modify NAHI ho sakti (silently fail, ya strict mode mein error). Accidental mutations se bachने ke liye useful.

const config = Object.freeze({ apiUrl: "https://api.example.com" });

config.apiUrl = "https://hacked.com";   // silently fail (strict mode mein error)
console.log(config.apiUrl);               // still original URL

console.log(Object.isFrozen(config));     // true
⚠️Common Mistake: Object.freeze() sirf SHALLOW hai — agar object ke andar nested objects hain, wo abhi bhi mutable hain! Deep freeze ke liye recursive freezing chahiye (ya library use karo).

Object.assign(target, ...sources) objects ko merge karta hai — spread operator ({...obj1, ...obj2}) aane se pehle ye standard tareeka tha, abhi bhi widely used hai (especially target object ko directly mutate karna ho to).

const defaults = { theme: "light", lang: "en" };
const userPrefs = { lang: "hi" };

const merged = Object.assign({}, defaults, userPrefs);
console.log(merged);   // { theme: "light", lang: "hi" }

// Spread operator (modern equivalent):
const merged2 = { ...defaults, ...userPrefs };   // same result
💡Tip: Modern code mein spread ({...a, ...b}) usually Object.assign() se prefer kiya jaata hai (zyada concise), lekin Object.assign() ka pehla argument DIRECTLY mutate hota hai — kabhi-kabhi ye behavior specifically chahiye hota hai.