Shallow Copy & Deep Copy

1876 ワード

JavaScriptを使用して開発する場合は、オブジェクトをコピーする必要があります.レプリケーションには、浅いコピーと深いコピーの概念があります.簡単に言えば、レプリケーション・レプリケーション・オブジェクトの参照値(アドレス値)を浅くコピーし、レプリケーション・オブジェクトの実際の値(値)を深くコピーします.

Shallow Copy浅いレプリケーション


アドレス値をコピーします.つまり、元の値またはレプリケーション値が変更されると、両方の値が変更されます.
let profile = {
 name: '철수',
 age: 8,
 school: '다람쥐초등학교'
}
let friendprofile = profile 

friendprofile
// { name: '철수', age: 8, school: '다람쥐초등학교' }

profile.name = '영희'
profile
// { name: '영희', age: 8, school: '다람쥐초등학교' }
friendprofile
// { name: '영희', age: 8, school: '다람쥐초등학교' }

Deep Copy深度コピー


データを共有するのではなく、同じ構造のオブジェクトを作成する必要がある場合があります.
このとき,「深いレプリケーション」の概念を用いる.
データ参照ではなくオブジェクトのシェイプをコピーすることで、1つのオブジェクトが変更され、別のオブジェクトのデータは影響を受けません.
すなわち、浅いレプリケーションとは異なり、アドレス値をレプリケーションするのではなく、すべてのコンテンツを新しいアドレスにレプリケーションし、共有参照を回避する.
文字列全体を文字列に変換し、その文字列をオブジェクトに変換する方法があります.
JSON.stringby()とJSON.parse()の使用
const profile = {
  name: '철수',
  age: 8,
  school: '다람쥐초등학교',
  like:{
    one:"사탕",
    two:"초콜릿"
	}
}

const myfriendprofile = {
  name: profile.name,
  age: profile.age,
  school: profile.school,
  like: profile.like
}

myfriendprofile

결과 
{
  name: '철수',
  age: 8,
  school: '다람쥐초등학교',
  like: { one: '사탕', two: '초콜릿' }
}

myfriendprofile(JSON.parse(JSON.stringfy(profile)))

결과
{
  name: '철수',
  age: 8,
  school: '다람쥐초등학교',
  like: { one: '사탕', two: '초콜릿' }
}
理解して追加...まだ分からない.
リファレンス
https://jess2.xyz/JavaScript/copy/
https://helloinyong.tistory.com/267