いづいづブログ

アジャイルコーチになりたい札幌在住SEです。アジャイル札幌スタッフ&ScrumFestSapporo実行委員。Like:パクチー/激辛/牡蠣/猫/初期仏教

JavaScriptのconstは値を変更できないわけではない

f:id:izumii-19:20200111214419p:plain


JavaScriptの勉強会に参加しようしようと思っていながら、3回目までは所用とモチベーションあがらず問題で参加できず。

4回目から参加することにしました。

ということで参加できなかった回の復習をしていたら、こんな例文が。

const obj = {name: 'Taro', age: 10}

obj['name'] = 'Jiro' // nameを書き換え

console.log(obj) // 出力結果 {name: "Jiro", age: 10}

あれ、定数なのに変更できるの?

constとは

まずはJavaScriptのconstを正確に理解しましょう。

このサイトがとてもわかりやすいので、ほとんどここで理解しました。

developer.mozilla.org

const 宣言は、値への読み取り専用の参照を作ります。
その値が不変ということではなく、その変数識別子が再代入できないというだけです。
たとえば、定数がオブジェクトのコンテンツの場合、オブジェクトのコンテンツ(例 その引数)自体は変更可能です。

const宣言は「値を変えられない変数を作る」なのではなく「値に読み取り専用の参照を作る」ということです。 constで制限しているのはアドレスを変更すること、つまり再代入や再宣言ができないということになります。

結局どういうことなの?

といっても文章だけで理解できなかったので、上記サイトの「例」であがっているコードと意味を理解するために図を書いてみました。

イメージ図なので細かいところはあってないかもしれませんが、自分が理解できたのでよしとします。

f:id:izumii-19:20200112122816p:plain

つまり"const 宣言は、値への読み取り専用の参照を作ります。"というのは"constで宣言した変数の矢印の向きを変えるようなことはできない"ということだと理解しました。

まとめ

前述のとおりconstは再代入や再宣言はできませんが、値が上書きできないわけではないです。

参考

今回の内容を理解するのに、以下の記事もとても役立ちました。

qiita.com