Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

immutableとconstの違いがわかりやすいコードを考えた

immutableとconstはとてもよく似ていて混乱しがちです。でも、コードを見れば一発で違いがわかります。

コード

const obj = {foo: 0}; // constである変数を作る
obj.foo = 42; // {foo: 0}はミュータブルなのでfooを変更できる
obj = {bar: 0}; // error! objへ再代入はできない!

let immutableObj = new Immutable({foo: 0}); // Immutableオブジェクトを生成してimmutableObjへ代入する。イミュータブルなオブジェクトはImmutable.jsなどのライブラリで生成できます
immutableObj.set('foo', 42); // immutableオブジェクトは変更できない
immutableObj.get('foo'); // fooは42ではなく0のまま
immutableObj = immutableObj.set('foo', 42); // 再代入することで変更できる

objはconstなので再代入できませんが、objが指し示すオブジェクトは変更可能です。

それに対して、immutableObjが指しているオブジェクトに変更を加えることはできません。しかし、immutableObjが何を指すかは変更可能(=再代入可能)です。