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?