JavaScript

【初学者】配列は const で宣言しても書き換えられる? – 配列の質問

みなさん、こんにちは。どんぶラッコです。

本日は、配列を教えた際によくあがる質問2つについて回答します!

配列は変数に代入しないと使えないの?

変数に保存していなくても使う事ができます。ただし、再利用性がなくなってしまいます。

例えば、

// Cを表示する
console.log(['A', 'B', 'C'])

という使い方は可能ですが、同じ処理を書きたい場合、都度都度配列を書く必要が出てきてしまいます。

// Cを表示する
console.log(['A', 'B', 'C'])

// Bを表示する
console.log(['A', 'B', 'C'])

なので、配列を一度変数に代入して、使う場合が多いです。

let alphabets = ['A', 'B', 'C']

// Cを表示する
console.log(alphabets)

// Bを表示する
console.log(alphabets)

配列を const で宣言しても書き換えができるのは何故?

const を 定数であると教わると思いますが、実は配列を宣言しても中身は書き換えられてしまいます。

const arr = 
arr.push(3)
console.log(arr) // 1, 2, 3

ここで混乱する方が多いと思います。

MDNのサイトを確認すると、

const 宣言は、値への読み取り専用の参照を作ります。これは、定数に保持されている値は不変ではなく、その変数の識別子が再代入できないということです。たとえば、定数の中身がオブジェクトの場合、オブジェクトの内容(プロパティなど)は変更可能です。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/const

とあります。

ざっくりしたイメージで言うと、

const a = 1

と定数(or 変数)を宣言すると、値と、その値をどこにしまったのか?という住所(参照)が設定されます。

なので、 定数 a を使うと、 aに記録されている住所に行って、値を読み出しに行きます。

a → 参照先 → 1

という順番です。

配列を宣言した場合でも、同じプロセスを辿って参照しに行きます。

const arr = 

となった場合、

arr → 参照先 → 

となります。

constはあくまでも参照を読み取り専用にするので、配列の中身を書き換えても参照先アドレスが変更されないので

arr.push(4) // push しても
arr → 参照先 →   // 参照は変わってない

書き換えが走ることになります。

参考) JavaScriptに参照渡し/値渡しなど存在しない

ABOUT ME
どんぶラッコ
ECコンサルタント、システムエンジニアを経て、quintet株式会社CTOに就任。普段はNuxt.jsやLaravelを使用しています。

\面白いと思ったら/

記事のシェア & Twitter のフォロー をお願いします!

@proglearn
一緒によく読まれている記事

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です