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」を使うことをおすすめします。