JS[Object.assign()의 함정]

j moon·2022년 7월 12일
0

JS

목록 보기
5/12
post-thumbnail

Object.assign()의 함정

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

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

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

newObj.b.c = 30;
console.log(obj); // { a: 10, b: { c: 30} }
console.log(newObj); // { a: 20, b: { c: 30} }

//obj.b.c 는 왜 바뀜?????
//delete obj.b.c 해도 newObj.b.c가 같이 지워짐

이유

둘 다 개별 복사본이 만들어지지 않았기 때문에 개체에 대한 동일한 참조를 공유합니다.
newObj.b. obj.b개체의 속성에 대한 변경 사항은 개체를 사용하는 모든 참조에 적용됩니다.

참조1
https://www.digitalocean.com/community/tutorials/copying-objects-in-javascript
참조2 - 중첩 객체 복사 << 검색
https://ko.javascript.info/object-copy

profile
자발개보초

0개의 댓글