protection

Object.freeze

Freezes an object: new properties cannot be added, existing properties cannot be removed, and their values, writability, and configurability cannot be changed. Returns the same object.

Object.freeze(obj)

Parameters

Parameter Purpose
obj The object to freeze
returns The same (now frozen) object

Examples

const o = Object.freeze({ a: 1 });
try { o.a = 2; } catch (e) {}
console.log(o.a);

Logs 1 — assignment silently fails (throws in strict mode)

const o = Object.freeze({ nested: { count: 0 } });
o.nested.count = 99;
console.log(o.nested.count);

Logs 99 — freeze is SHALLOW; nested objects remain mutable

console.log(Object.isFrozen(Object.freeze({})));

Logs true

const deepFreeze = obj => {
  Object.values(obj).forEach(v => v && typeof v === 'object' && deepFreeze(v));
  return Object.freeze(obj);
};
const o = deepFreeze({ n: { x: 1 } });
console.log(Object.isFrozen(o.n));

Logs true — recursive freeze for deep immutability

Gotcha

Object.freeze is SHALLOW — nested objects and arrays inside a frozen object remain fully mutable. Mutations silently fail in sloppy mode but throw a TypeError in strict mode.

Related methods

← All JS Object methods · Array methods · Spread vs rest