Object.assign({}, obj) vs JSON.parse(JSON.stringify(obj));

1)

기본적으로

Object.assign({}, obj)은 객체의 참조를 끊어준다.

2)

하지만 예를들면 이렇게 객체안에 배열이 있는 경우 내부 배열의 그의 복사본과의 참조 관계까지는 끊지 못한다. 왜냐하면 그 내부의 배열은 자신의 복사본과 그 자신 사이의 참조로 묶여있고,

자신을 데리고 있는 객체가 그 자신의 복사본과의 참조관계를 끊었다고 해서 자동으로 자신(내부 배열)의 복사본과의 참조를 끊지는 않기 때문이다.

3)

JSON.parse(JSON.stringify(obj))

이 경우 JSON.parse(JSON.stringify(obj))를 쓰면 이러한 문제를 바로 잡을 수 있다. JSON.parse(JSON.stringify(obj))의 경우 소속된 모든 것의 참조까지도 모두 끊는 것과 같은 결과를 가져올 수 있다. . string으로 만들었다가 parse해버리는 거니까 그런듯.