Home JS[Object.assign()의 함정]
Post
Cancel

JS[Object.assign()의 함정]

Object.assign()의 함정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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

This post is licensed under CC BY 4.0 by the author.