【JavaScript】配列の変数を操作する方法(値渡しと参照渡し)
配列ではない場合の変数の操作
let a = 1;
let b = a;
a = 3;
console.log(a);//3
console.log(b);//1
これはlet b = a;の後にa = 3;を実行しても、処理を実行したbには影響を与えない。
プリミティブ(値)型の挙動。JavaScriptの場合は値渡しと呼ぶ。
「引越し前の住所を見ている」と覚えることにする。
配列の変数の操作
let a = [1,2];
let b = a;
a[0] = 3;
console.log(a);//[3,2];
console.log(b);//[3,2]
この場合のbは[1,2]ではなく、配列a(の場所)を参照しているため、[1,2]とはならず[3,2]となる。
オブジェクト型(参照型)の挙動。JavaScriptの場合は参照の値渡し(共有渡し)と呼ぶ。
「引っ越し後の住所に転送されている状態」と覚えることにする。
オブジェクト型(配列)の変数を操作する方法
スプレッド構文(...)を使うことでプリミティブ型のように変数を操作できる。
let a = [1,2];
let b = [...a];//let b = a;をスプレッド構文で書いた場合
a[0] = 3;
console.log(a);//[3,2];
console.log(b);//[1,2];
補足
言語により、参照の値渡し、参照渡しと挙動と表現が異なる。
用語を引用する場合は前提条件(本件の場合は言語)を正しく確認する必要がありますね。学びました。
参考:値渡しと参照渡しと参照の値渡しと
https://qiita.com/ur_kinsk/items/949dabe975bdc1affb82
謝辞:shiracamus様