MDN문서에 따른 정의는 다음과 같다.
Object.assign() 메소드는 열거할 수 있는 하나 이상의 출처 객체로부터 대상 객체로 속성을 복사할 때 사용합니다. 대상 객체를 반환합니다.
Object.assign(target, ...sources) // 객체 병합
// 예제1
var obj1 = {a:1};
var obj2 = {b:2};
var obj3 = {c:3};
var newObj = Object.assign({}, obj1, obj2, obj3);
console.log(newObj); // {a: 1, b: 2, c: 3}
타겟 인자에 빈 객체를 주고, 소스 인자에 각 객체들을 넘겨주면, 빈 객체에 병합이 된다.
// 예제2
var obj1 = {a:1};
var obj2 = {b:2};
var obj3 = {c:3};
var newObj = Object.assign(obj1, obj2, obj3);
console.log(newObj); // {a: 1, b: 2, c: 3}
console.log(obj1); // {a: 1, b: 2, c: 3}
타겟 인자에 기존에 존재하는 객체를 넘기면, 타겟에 넘긴 인자가 변질이 된다.
Object.assign의 메서드의 결과가 새로운 객체를 반환해야한다면, 타깃으로는 빈 객체를 주는 것을 잊지 말아야 한다.
MDN 설명에 의하면,
동일한 키가 존재할 경우 대상 객체의 속성은 출처 객체의 속성으로 덮어쓰여지고, 후에 출처의 속성은 이전의 출처의 속성과 유사하게 덮어쓰여진다고 한다.