Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Yes, it is possible to deeply freeze an object in JavaScript using the Object.freeze() method recursively on all its nested properties. Here is an example code snippet to achieve this:

function deepFreeze(obj) {
  Object.freeze(obj);
  Object.getOwnPropertyNames(obj).forEach(prop => {
    if (obj.hasOwnProperty(prop) && obj[prop] !== null && (typeof obj[prop] === "object" || typeof obj[prop] === "function") && !Object.isFrozen(obj[prop])) {
      deepFreeze(obj[prop]);
    }
  });
  return obj;
}

const obj = {
  prop1: {
    nestedProp: {
      array: [1, 2, 3]
    }
  },
  prop2: "hello"
};

deepFreeze(obj);

// Trying to modify any properties of the object would fail silently in strict mode
obj.prop2 = "world"; // This would have no effect
obj.prop1.nestedProp.array.push(4); // This would also have no effect