技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

JavaScript:オブジェクト型の定数値にはObject.freeze()を使う

プリミティブ型(Number型やString型等)の変数は、constで定義することで変更不可にできます。
これを利用して、定数値を定義することができます。
 
【サンプルコード】
const hoge = 1;
hoge = 2;
console.log(hoge);
 
ChromeデベロッパーツールのConsoleで実行】
Uncaught TypeError: Assignment to constant variable.
at <anonymous>:2:6
 
----
 
しかし、オブジェクト型の場合、constで保持されるのは変数が指し示すアドレスであり、値は変更可能です。
そのため、定数値を定義するには適していません。
 
【サンプルコード】
const obj = {
 hoge: 1
};
obj.hoge = 2;
console.log(obj.hoge);
 
ChromeデベロッパーツールのConsoleで実行】
2
 
----
 
オブジェクト型で定数値を定義したい場合は、Object.freeze()を使う必要があります。
これを使うことで、オブジェクト型の変数が指し示す値を変更不可にすることができます。
 
【サンプルコード】
const obj = {
 hoge: 1
};
Object.freeze(obj);
obj.hoge = 2;
console.log(obj.hoge);
 
ChromeデベロッパーツールのConsoleで実行】
1