Object.freeze() से ऑब्जेक्ट को इम्यूटेबल बनाएं - नई प्रॉपर्टी नहीं जोड़ सकते, मौजूदा नहीं बदल सकते, नहीं हटा सकते।
बुनियादी उपयोग
const obj = { value1: 10, value2: 20 };
// फ्रीज करें
Object.freeze(obj);
// बदलने का प्रयास
obj.value1 = 100; // साइलेंटली फेल (सख्त मोड में एरर)
obj.newProp = "test"; // नहीं जुड़ेगा
delete obj.value2; // नहीं हटेगा
console.log(obj.value1); // 10 (अपरिवर्तित!)
console.log(obj); // { value1: 10, value2: 20 }
सख्त मोड में एरर
'use strict';
const frozen = Object.freeze({ x: 1 });
frozen.x = 2; // TypeError: Cannot assign to read only property 'x'
शैलो फ्रीज (नेस्टेड ऑब्जेक्ट्स अभी बदल सकते हैं)
const obj = {
name: "John",
address: { city: "NYC" }
};
Object.freeze(obj);
obj.name = "Jane"; // ❌ फेल
obj.address.city = "LA"; // ✅ काम करता है! (नेस्टेड ऑब्जेक्ट फ्रीज नहीं)
console.log(obj.address.city); // "LA"
डीप फ्रीज फंक्शन
function deepFreeze(obj) {
// प्रिमिटिव या पहले से फ्रीज
if (obj === null || typeof obj !== 'object') return obj;
if (Object.isFrozen(obj)) return obj;
// सभी प्रॉपर्टीज रिकर्सिवली फ्रीज
for (const key of Object.keys(obj)) {
deepFreeze(obj[key]);
}
return Object.freeze(obj);
}
const deep = { a: 1, b: { c: 2 } };
deepFreeze(deep);
deep.b.c = 3; // TypeError सख्त मोड में, साइलेंट फेल अन्यथा
संबंधित मेथड्स
| मेथड | प्रभाव | फ्रीज? |
|---|---|---|
Object.freeze() | न जोड़/बदल/हटा सकते | ✅ पूर्ण |
Object.seal() | बदल सकते, न जोड़/हटा सकते | आंशिक |
Object.preventExtensions() | न जोड़ सकते, बदल/हटा सकते | न्यूनतम |
Object.isFrozen() | जांचें | बूलियन |
Object.isSealed() | जांचें | बूलियन |
Object.isExtensible() | जांचें | बूलियन |
चलाने का तरीका
node freeze-object.js
आउटपुट
After changing the field value1 from 10 to 100 =10
उपयोग के मामले
- कॉन्स्टेंट कॉन्फिगरेशन ऑब्जेक्ट्स
- रेडक्स-स्टाइल स्टेट (इम्यूटेबिलिटी)
- लाइब्रेरी एक्सपोर्ट्स सुरक्षित करना
- रनटाइम बग्स रोकना