実行環境
・OS:Windows
・ブラウザ:Google Chrome
##JavaScriptの定数(const)は「変更できない」わけではない。
const 宣言は格納された値に読み取り専用の参照を作りますが、JavaScriptの定数(const)は再代入できないだけで必ずしも変更できないわけではありません。
変数の正体とはアドレスです。
定数が制限するのはアドレス変更、つまり再代入です。
参照型ではアドレス変更をせずに値を変更できるため、定数でも値の変更ができます。
##格納された値が基本型の場合
JavaScript
const maxNum = 1234;
maxNum = 1000; // エラー
maxNumに値を再び代入できないためエラーとなります。
##格納された値が参照型の場合
JavaScript
const arr = ['A', 'B', 'C'];
arr = ['あ', 'い', 'う']; // エラー
arr[1] = 'い'; // ←---???
constは再代入できないため配列arrに配列を再代入しようとするとエラーとなります。
しかし arr[1] = 'い' はエラーとはなりません。
参照型*(Array, Objectなど)*では、値を格納している参照値を変更せず格納された値を変更できます。
例では参照値はそのままに、その中身だけ書き換えています。
console.log(arr); // (3) ["A", "い", "C"]
これがJavaScriptの定数が再代入できないだけで変更できないわけではないと言われる理由です。