Q17: Implement Deep Freeze for Complete Immutability
Extend Object.freeze() to recursively freeze all nested object and array properties to guarantee complete object graph immutability.
Recursive Deep Freeze
function deepFreeze(obj) {
if (obj === null || typeof obj !== 'object') return obj;
Object.freeze(obj);
Object.getOwnPropertyNames(obj).forEach(prop => {
const val = obj[prop];
if (val !== null && typeof val === 'object' && !Object.isFrozen(val)) {
deepFreeze(val);
}
});
return obj;
}
const config = deepFreeze({ api: { host: 'localhost' } });
// config.api.host = 'remote'; // Throws TypeError in strict mode💡 Deep freeze invokes Object.freeze() at the current level, then recursively traverses and freezes all nested object properties.
Key Takeaways
- Native Object.freeze() is shallow and does not freeze nested object properties.
- Recursively freezes child objects to guarantee deep immutability.
Knowledge Check
What occurs when attempting to mutate a property on a deepFrozen object in strict mode?