깊은복사: JSON.parse(JSON.stringify(object));
let obj = {
a: 1,
b: {
c: 2,
},
}
let newObj = JSON.parse(JSON.stringify(obj));
obj.b.c = 20;
console.log(obj);
console.log(newObj);
얕은복사: Object.assign({}. obj); ...spread
1) 얕은 복사는 top property는 복사(고유 값을 가짐)가 되지만,
2) 그 안에 내장된 속성에 대해서는 주소를 공유하게 됨.
- 즉, 윗단계는 고유값과 고유의 주소를 가져서 복사한 녀석을 바꾸면 복사한 녀석의 값만 바뀌고 원본 자료는 영향을 받지 않음. 하지만, 하위 단계의 것들은 주소를 공유해서 하위 속성의 값을 바꾸는 것은 그 주소를 공유하기에 복사본이나 원본이나 똑같이 변경이 됨.
1) 예시
let obj = {
a: 1,
b: 2,
};
let objCopy = Object.assign({}, obj);
console.log(objCopy);
objCopy.b = 89;
console.log(objCopy);
console.log(obj);
2-1) 예시
delete obj.twins['Jared Leto'];
expect('Jared Leto' in copiedObj.twins).to.equal(false);
2-2) 예시
let obj = {
a: 1,
b: {
c: 2,
},
}
let newObj = Object.assign({}, obj);
console.log(newObj);
obj.a = 10;
console.log(obj);
console.log(newObj);
newObj.a = 20;
console.log(obj);
console.log(newObj);
newObj.b.c = 30;
console.log(obj);
console.log(newObj);