[JavaScript]浅いレプリケーション、深いレプリケーション


深さ放射と浅い放射の違いは基本型と参照型放射の違いにある.
変数をコピーするときは、[基本シェイプもポップアップ値を参照](Reference Basic Shapeもフライアウト値を参照)が正しいが、参照シェイプとの違いは、[オブジェクトの変数(アウトライン)領域](Object Variable(Outline)Area)が独立して存在することである.

ふかほうしゃ

let num1 = 10
let num2 = num1
num2=15

console.log(num1) // 10
console.log(num2) // 15
let num 2=num 1ではnum 2もnum 1と同じデータ「10」を持つ主な切り上げを見ることができる.
num 2=15を再割り当てすると、num 2は新しいデータ「15」の高騰を見ることができます.
出現値をコピーするのは1回のみであり、独立したメモリに値(ex'15)自体を割り当てると考えられる.

浅い放射

let a = 10;
let b = a;
let obj1 = { c: 10, d:'ddd}
let obj2 = obj1

b=15;
obj2.c = 20;
データの参照値(メモリアドレス)を渡し、最終的にデータを生成するのではなく、データを共有します.

*写真ソースコアJavaScript
obj2.c=20に変更しても同じ株価が見られるので、obj 1のc値も20です.
したがって、伝達されたオブジェクトを変更しても、元のオブジェクトを変更しない必要があるため、可変オブジェクトが必要になります.

」参考データを深くコピー!


1 . object.assign( )


Object.空のオブジェクトをassign(作成するオブジェクト、コピーするオブジェクト)メソッドの最初の引数として、次に割り当てるオブジェクトを2番目の引数として使用します.
const obj = { a: 1 };
const newObj = Object.assign({}, obj);

newObj.a = 2;

console.log(obj); // { a: 1 }
console.log(obj === newObj); // false

2.展開演算子

const obj = {
  a: 1,
  b: 2,
};

const newObj = { ...obj };

newObj.b = 3;

console.log(obj); // { a: 1, b: 2 }
console.log(newObj); // {a:1, b:3 }

ただし、これらの2つの方法では、ネストされたオブジェクトに深度コピーは行われません。

const obj = {
  a: 1,
  b: {
    c: 2,
  },
};

const newObj = { ...obj };

newObj.b.c = 3;

console.log(obj); // { a: 1, b: { c: 3 } }
console.log(obj.b.c === newObj.b.c); // true

3.JSONによる簡単な深度コピー


オブジェクトをJSON構文で表す文字列に変換し、JSONオブジェクトに変換します.
HttpRequestから受信したデータを保存したオブジェクトをコピーすると、等温線の低保しか処理しません.
const obj = {
  a: 1,
  b: {
    c: 2,
  },
};

const newObj = JSON.parse(JSON.stringify(obj));

newObj.b.c = 3;

console.log(obj); // { a: 1, b: { c: 2 } }
console.log(obj.b.c === newObj.b.c); // false