Freezing objects for immutability
In JavaScript, const
doesn’t mean a value is constant and can never be changed. To make an object immutable, we have to freeze it.
// the word `const` makes it sound like this object can never be modified
const dog = { name: 'Coop' }
// dog → { name: 'Coop' }
// we can still change properties of an object defined with `const`
dog.name = 'Cooper'
// dog → { name: 'Cooper' }
// we can also add new properties to it
dog.age = 3
// dog → { name: 'Cooper', age: 3 }
// the only thing we cannot do is assign an entirely different object
dog = { name: 'Emil' } // TypeError (cannot assign to readonly property)
// to prevent ALL changes to an object, we have to freeze it
const cat = Object.freeze({ name: 'Milly' })
// cat → { name: 'Milly' }
// frozen objects can’t be changed (these steps throw errors in strict mode)
cat.name = 'Lilly'
cat.age = 9
// cat → { name: 'Milly' }