Problem Statement
What does Object.freeze() do?
Explanation
Object freeze makes an object immutable. You cannot add, delete, or modify properties.
Frozen objects cannot be changed in any way. Attempting changes fails silently in non-strict mode or throws errors in strict mode.
Freeze is shallow, meaning nested objects are not automatically frozen.
Use freeze to create constants or protect important data.
Object seal is similar but allows modifying existing properties.
Code Solution
SolutionRead Only
const obj = {
name: 'John',
age: 30
};
// Freeze object
Object.freeze(obj);
// Cannot modify
obj.name = 'Jane'; // Ignored (or error in strict mode)
console.log(obj.name); // 'John' (unchanged)
// Cannot add
obj.city = 'Boston'; // Ignored
console.log(obj.city); // undefined
// Cannot delete
delete obj.age; // Ignored
console.log(obj.age); // 30 (still there)
// Check if frozen
console.log(Object.isFrozen(obj)); // true
// Shallow freeze
const nested = Object.freeze({
name: 'John',
address: {city: 'NYC'}
});
// Cannot change top level
nested.name = 'Jane'; // Ignored
// CAN change nested object (not frozen)
nested.address.city = 'Boston'; // Works!
console.log(nested.address.city); // 'Boston'
// Deep freeze
function deepFreeze(obj) {
Object.freeze(obj);
Object.keys(obj).forEach(key => {
if (typeof obj[key] === 'object' && obj[key] !== null) {
deepFreeze(obj[key]);
}
});
return obj;
}Practice Sets
This question appears in the following practice sets:
