39
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaScriptの定数(const)は「変更できない」わけではない。

Last updated at Posted at 2017-04-23

実行環境
・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の定数が再代入できないだけで変更できないわけではないと言われる理由です。

39
30
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
30

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?