Shallow Copy & Deep Copy
1876 ワード
JavaScriptを使用して開発する場合は、オブジェクトをコピーする必要があります.レプリケーションには、浅いコピーと深いコピーの概念があります.簡単に言えば、レプリケーション・レプリケーション・オブジェクトの参照値(アドレス値)を浅くコピーし、レプリケーション・オブジェクトの実際の値(値)を深くコピーします.
アドレス値をコピーします.つまり、元の値またはレプリケーション値が変更されると、両方の値が変更されます.
データを共有するのではなく、同じ構造のオブジェクトを作成する必要がある場合があります.
このとき,「深いレプリケーション」の概念を用いる.
データ参照ではなくオブジェクトのシェイプをコピーすることで、1つのオブジェクトが変更され、別のオブジェクトのデータは影響を受けません.
すなわち、浅いレプリケーションとは異なり、アドレス値をレプリケーションするのではなく、すべてのコンテンツを新しいアドレスにレプリケーションし、共有参照を回避する.
文字列全体を文字列に変換し、その文字列をオブジェクトに変換する方法があります.
JSON.stringby()とJSON.parse()の使用
リファレンス
https://jess2.xyz/JavaScript/copy/
https://helloinyong.tistory.com/267
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
Reference
この問題について(Shallow Copy & Deep Copy), 我々は、より多くの情報をここで見つけました https://velog.io/@hjthgus777/Shallow-Copy-Deep-Copyテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol