JavaScriptのconstは値を変更できないわけではない
JavaScriptの勉強会に参加しようしようと思っていながら、3回目までは所用とモチベーションあがらず問題で参加できず。
4回目から参加することにしました。
ということで参加できなかった回の復習をしていたら、こんな例文が。
const obj = {name: 'Taro', age: 10}
obj['name'] = 'Jiro' // nameを書き換え
console.log(obj) // 出力結果 {name: "Jiro", age: 10}
あれ、定数なのに変更できるの?
constとは
まずはJavaScriptのconstを正確に理解しましょう。
このサイトがとてもわかりやすいので、ほとんどここで理解しました。
const 宣言は、値への読み取り専用の参照を作ります。 その値が不変ということではなく、その変数識別子が再代入できないというだけです。 たとえば、定数がオブジェクトのコンテンツの場合、オブジェクトのコンテンツ(例 その引数)自体は変更可能です。
const宣言は「値を変えられない変数を作る」なのではなく「値に読み取り専用の参照を作る」ということです。 constで制限しているのはアドレスを変更すること、つまり再代入や再宣言ができないということになります。
結局どういうことなの?
といっても文章だけで理解できなかったので、上記サイトの「例」であがっているコードと意味を理解するために図を書いてみました。
イメージ図なので細かいところはあってないかもしれませんが、自分が理解できたのでよしとします。
つまり"const 宣言は、値への読み取り専用の参照を作ります。"というのは"constで宣言した変数の矢印の向きを変えるようなことはできない"ということだと理解しました。
まとめ
前述のとおりconstは再代入や再宣言はできませんが、値が上書きできないわけではないです。
参考
今回の内容を理解するのに、以下の記事もとても役立ちました。