JavaScript の定数
const で定数を宣言する
JavaScript の ES6 以降では、定数を宣言するために const キーワードが使えるようになりました。
const キーワードで定数を宣言するためには、宣言時に初期値を与える必要があります。 あとから値を代入しようとすると、エラーになります。
const キーワードで宣言した定数のスコープはブロックスコープです。スコープ的には let と同様です。明示的なブロック外で宣言しても、 Global オブジェクトのプロパティとして扱われません。
const x = 1;
console.log(x); // 1
console.log(window.hasOwnProperty('x')); // false
x = 2; // エラー
const でオブジェクトを宣言する
JavaScript の「定数」というのは、再割り当て (reassignment) できない、「読み取り専用」(Read-Only) である、という意味になります。
例えば、オブジェクトの参照をある定数に一度割り当てたら、そのオブジェクトへの参照が上書きできなくなります。 しかし、オブジェクトの属性値などが変更不可になるわけではありません。
次の例では、const キーワードを使って宣言した定数オブジェクト a の属性値 age を書き換えています。
const a = {
name: 'Mike',
age: 25
};
console.log(a);
a.age = 30; // 書き換える
console.log(a);
実行結果は次の通りです。確かに age が書き換えられています。
しかし、引き続き a に何かを割り当てようとすると、エラーが発生します。
a = {};
もちろん、これは a が const を用いて宣言されているためです。
オブジェクトのプロパティの「値の変更を禁止」するためには、Object.freeze()関数を利用できます。