Object.freeze: Immutable Objects
One of my favorite part of JavaScript has always been mutability of objects. I loved that MooTools and likewise frameworks could modify native prototypes to enhance them with functionality we knew the language need; in fact, I credit MooTools with pushing the web forward.
There are cases, however, where you don't want an object to be modifiable; you don't want values for existing properties to be changed, added, or removed. That's where Object.freeze
can help -- with Object.freeze
you can create immutable objects you can trust!
const obj = Object.freeze({ x: 1, y: 2 }); // None of these do anything obj.x = 8; // { x: 1, y: 2} delete obj.x; // { x: 1, y: 2} obj.z = 3; // { x: 1, y: 2}
Object.freeze
is a welcomed addition to JavaScript and a necessary one. If you have objects whose integrity you want to secure, immutability is required. Object.seal
provides similar functionality without the ability to freeze values, so Object.freeze
is your best choice when you want to lock down an object!
It’s good to remind that
Object.freeze
does only shallow freeze.That’s a nice feature. Much needed. However, I hope the browser support is good.
Should I remind that MooTools’ practice to extend native prototypes prevented W3C to use well-known names like
contains
andflatten
, because it would have literally broken the web?Extending native prototypes is the last thing you’d want in a general purpose library.