0
0

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 3 years have passed since last update.

なぜ const(定数) で宣言したオブジェクトの中身を書き換えられるのか

Last updated at Posted at 2020-11-25

今javascriptを勉強しているのだが、その過程で得た知識を共有しようと思う。
(間違っていたら指摘していただけると非常に助かります。)

javascriptを体系的に学ぶ前には そういうもの として逃げていたことなのだが、先程 オブジェクトのコピーの挙動を理解したときにピンと来て理解したものが以下である。

まず、以下のことははご存知のことだと思うが

let myList=[0,1,2,3,4];
let mymyList=myList;
mymyList[0]=100

console.log(myList[0],myList[0])//100 100  ⇐両方100になる

javascriptでは以下のようにすると myList も mymyList も両方中身が書き換わってしまう。

今回のテーマを解説する前に、先にこちらの挙動を解説しておくと、

実はmyList という変数は、少し難しく言うと、'そのオブジェクト自体へのアドレスへの参照'を保持しているのである。

もっと簡単に大雑把に説明すると myList は 0,1,2,3,4 といった小さい箱を包み込んだ大きい箱 のメモリ上での場所を指しているのだ。

そして mymyList に '同じ箱のアドレス'を渡してあげたので myList からでも mymyList からでも同じ要素にアクセスできる のである。

ここで本題に戻るが、 const では "その変数が指す大きな箱のアドレスを変えられなくするもの" である。

つまり、

let box=[0,1,2,3]
box=[9,9,9,9]

のように let を使うと box に別ので確保したメモリのアドレスを新しく格納することはできるが、

const を使うとエラーが起きる。

あくまでもconstで固定されたのは、'大きい箱の場所'であって、大きい箱からアクセスされるところは変えることができるのである。

以上が自分のconstについての理解である。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?