[TIL]210314

박성진·2021년 3월 14일

Object.assign

Object.assign() 메소드를 MDN에 찾아보면 열거할 수 있는 하나 이상의 출처 객체로부터 대상 객체로 속성을 복사할 때 사용합니다. 대상 객체를 반환합니다. (객체를 병합)

Object.assign(target, ...sources)

여기소 sources는 target에 병합됩니다. 그리고 return 값으로 target을 반환합니다.

ex)

let obj1 = {a: 1}
let obj2 = {b: 2}
let obj3 = {c: 3}
let newObj = Object.assign({}, obj1, obj2, obj3)
// output: newObj {a: 1, b: 2, c: 3}

빈 객체안에 obj1,obj2,obj3가 빈객체에 병합됩니다.
그렇다면 target에 빈객체가 아니라 이미 존재하는 객체를 넣으면

ex)

let obj1 = {a: 1}
let obj2 = {b: 2}
let obj3 = {c: 3}
let newObj2 = Object.assign(obj1, obj2, obj3)
// output: newObj2 {a: 1, b: 2, c: 3}
// obj1 {a: 1, b: 2, c: 3}

그 결과 newObj2에 obj1,obj2,obj3를 모두 병합한 결과가 나옵니다. 그러나 target인 obj1도
{a: 1, b: 2, c: 3} 된 것을 알수 있습니다.
추가로

newObj2['d'] = 4
// output: newObj2 {a: 1, b: 2, c: 3, d: 4}
// obj1 {a: 1, b: 2, c: 3, d: 4}

newObj2에 {d:4}를 추가하면 obj1에도 그대로 추가되는 것을 볼 수 있습니다.
따라서 Object.assign의 메서드의 결과가 새로운 객체를 반환해야한다면, 타깃으로는 빈 객체를 주어야합니다.

0개의 댓글