객체를 프로퍼티 값으로 갖는 객체의 경우 얕은 복사는 한 단계까지만 복사하는 것
객체에 중첩되어 있는 객체까지 모두 복사하는 것
const o = { x: { y: 1} }
// 얕은 복사
const c1 = { ...o }
console.log(c1) // {x: {y: 1}}
console.log(o) // {x: {y: 1}}
// 얕은 복사는 객체에 중첩되어 있는 객체의 경우 참조 값을 복사함
console.log(c1 === o) // false
console.log(c1.x === o.x) // true
const _ = require('lodash')
// 깊은복사
const c2 = _.cloneDeep(o)
// 깊은 복사는 객체에 중첩되어 있는 객체까지 모두 복사해서 원시 값처럼 완전한 복사본을 만듬
// 아마 메모리를 새로 할당해서 복사하는 듯
console.log(c2===o) // false
console.log(c2.x === o.x) // false
얕은 복사와 깊은 복사로 생성된 객체 원본과 복사본은 참조 값이 다른 별개의 객체다.
const v = 1
// 원시값을 복사 하는것을
// 깊은 복사라고 부르기도 함
const c1 = v
console.log(c1 === v) // true
const o = { x: 1 }
// 객체를 복사 하는것을
// 얕은 복사라고 부르기도 함
const c2 = o
console.log(c2 === o) // true