元の値とオブジェクトの比較


データ型から、JavaScriptが提供する7つのデータ型は、元のタイプのオブジェクト型と大きく区別できることがわかります.
元のタイプの値は変更できない値であり、オブジェクトタイプの値は変更可能な値です.
元の値を変数に割り当てると、変数(メモリ領域)に実際の値が格納されます.対照的に、オブジェクトが変数に割り当てられている場合、その変数は参照値を格納します.
元の値を持つ変数を他の変数に割り当てると、元の値がコピーされて渡されます.値の転送と呼ばれ、オブジェクトを指す変数を他の変数に割り当てると、元の参照値がコピーされて転送されます.これを参照伝達といいます.
このように言語で説明するよりも、次のコードを見てみましょう.
let a = 30;
let copy = a;
copy = 10;
console.log(a) // ?
aは30まで撮られます.すなわち価値によって伝える.すなわち、メモリ内のa識別子のメモリ空間は不変であり、新しいメモリのcopyに値を渡す.
参考の転送を見てみましょう.
let obj = {
  a: 30
}

let copy = obj;

copy.a = 50

console.log(obj) // ?
objは相変わらずですか?いいえ、コピーしてもオブジェクトは可変です.obj値が変わった可能性があります.
つまり、オブジェクトは複数の値を格納できるため、メモリ容量が大きくなります.コピーして別のメモリに格納すると、効率が低下し、変数にオブジェクトを割り当てると、メモリのプリアンブルが参照値に入り、コピー時に同じメモリアドレスを指すようになります.したがって,コピーを行っても元のオブジェクトに触れるため,オブジェクトは可変である.
すなわち,オブジェクトを使用する際には,不変性を保つために深い複製を用いることが望ましい.
良いライブラリを使うのが一番いい方法です.