JavaScript: constで値を変更してもエラーにならないケース

JavaScriptのconstを使って定義した変数に対して、 値を再代入すると通常はエラーが発生します。 ただし、変数の種類によってはエラーが発生しない場合もあります。

結論から言うと、基本型の変数に関しては再代入は不可ですが、 参照型の変数の要素値を変更することは可能です (但し、おすすめはしません)。

基本型の変数の場合

文字列型や数値型のような基本型の変数に対しては、 再代入を行うと次のようにエラーが発生します。

const s = "hello";
s = "world";        // エラー
実行結果
Uncaught TypeError: invalid assignment to const 's'

参照型の変数の場合

一方、次のように配列「arr」の要素の値を変更したり、 要素を増やしてもエラーにはなりません。

const arr = [1, 2, 3];

arr[0] = 2;

arr[3] = 4;

console.log(arr);
実行結果
Array(4) [ 2, 2, 3, 4 ]

配列やオブジェクトのような参照型の変数に関しては、 変数の参照が変更しない限りはエラーが発生しません。 要素値の変更の場合、配列「arr」の参照は変わらないのでOKです。

但し次の「配列そのものの再代入」 のような参照が変わるコードはエラーとなります。

const arr = [1, 2, 3];

arr = [2, 3, 4];   // エラー
実行結果
Uncaught TypeError: invalid assignment to const 'arr'

もし配列やオブジェクトの要素値を変更するだけなら constを使うことも可能ですが、 紛らわしいので変更の可能性がある変数は「let」を使うことをおすすめします。

JavaScript入門