Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript deepCopy와 ShallowCopy의 차이점

<시간/>

얕은 복사와 깊은 복사는 언어에 구애받지 않습니다. 얕은 사본은 가능한 한 적게 복제합니다. 컬렉션의 얕은 복사본은 요소가 아니라 컬렉션 구조의 복사본입니다. 얕은 사본으로 두 개의 컬렉션이 이제 개별 요소를 공유합니다.

예시

let innerObj ={ a:'b', c:'d'}let obj ={ x:"test", y:innerObj}// 얕은 copy를 생성합니다. copyObj =Object.assign({}, obj);// copyObj와 obj의 prop y는 이제 동일한 innerObj를 참조합니다. 이에 대한 모든 변경 사항은 반영됩니다.innerObj.a ="test"console.log(obj)console.log(copyObj)

출력

{ x:'테스트', y:{ a:'테스트', c:'d' } } { x:'테스트', y:{ a:'테스트', c:'d' } }  

얕은 복사본은 복제를 재귀적으로 만들지 않습니다. 최상위 수준에서만 수행됩니다.

깊은 복사는 모든 것을 복제합니다. 컬렉션의 전체 복사본은 원본 컬렉션의 모든 요소가 복제된 두 개의 컬렉션입니다.

예시

let innerObj ={ a:'b', c:'d'}let obj ={ x:"test", y:innerObj}// 딥 카피 생성.let copyObj =JSON.parse(JSON.stringify (obj))// copyObj와 obj의 prop y는 이제 동일한 innerObj를 참조합니다. 이에 대한 모든 변경 사항은 반영됩니다.innerObj.a ="test"console.log(obj)console.log(copyObj)

출력

{ x:'테스트', y:{ a:'테스트', c:'d' } } { x:'테스트', y:{ a:'b', c:'d' } }