みなさん、こんにちは。どんぶラッコです。
本日は、配列を教えた際によくあがる質問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のサイトを確認すると、
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/const
const
宣言は、値への読み取り専用の参照を作ります。これは、定数に保持されている値は不変ではなく、その変数の識別子が再代入できないということです。たとえば、定数の中身がオブジェクトの場合、オブジェクトの内容(プロパティなど)は変更可能です。
とあります。
ざっくりしたイメージで言うと、
const a = 1
と定数(or 変数)を宣言すると、値と、その値をどこにしまったのか?という住所(参照)が設定されます。
なので、 定数 a
を使うと、 aに記録されている住所に行って、値を読み出しに行きます。
a → 参照先 → 1
という順番です。
配列を宣言した場合でも、同じプロセスを辿って参照しに行きます。
const arr =
となった場合、
arr → 参照先 →
となります。
constはあくまでも参照を読み取り専用にするので、配列の中身を書き換えても参照先アドレスが変更されないので
arr.push(4) // push しても
arr → 参照先 → // 参照は変わってない
書き換えが走ることになります。
参考) JavaScriptに参照渡し/値渡しなど存在しない