Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした