CóSự khác nhau giữa Object.assign và đối tượng lây lan
var obj = { a: 1, b: 2};
sự khác biệt giữa
obj = Object.assign(obj, { c: 3});
Và
obj = {...obj, c: 3 };
CóSự khác nhau giữa Object.assign và đối tượng lây lan
var obj = { a: 1, b: 2};
sự khác biệt giữa
obj = Object.assign(obj, { c: 3});
Và
obj = {...obj, c: 3 };
Sự khác biệt là gì được rằng khi sử dụng một lây lan bạn luôn luôn tạo một đối tượng mới:
const a = { name: 'Joe Bloggs' }
const b = { ...a, age: 27 };
console.log(a === b) //=> false
Tuy nhiên sử dụng Object.assign
nó được thể đột biến một đối tượng hiện:
const a = { name: 'Joe Bloggs' }
const b = Object.assign(a, { age: 27 });
console.log(a === b) //=> true
Bạn vẫn có thể đạt được các hành vi của một đối tượng lây lan với Object.assign
bằng cách thông qua một đối tượng theo nghĩa đen là đối số đầu tiên:
const a = { name: 'Joe Bloggs' }
const b = Object.assign({}, a, { age: 27 });
console.log(a === b) //=> false
Bởi vì bạn không thể chỉ định một mục tiêu với sự lây lan đối tượng và do đó không thể thay đổi các đối tượng hiện có, nó thực sự an toàn hơn 'Object.assign' và nhiều sự đồng thuận hơn. – ftor
Kiểm tra [phiên bản biên soạn] (https://babeljs.io/repl/#?evaluate=false&lineWrap=false&presets=es2015%2Cstage-2&code=obj%20%3D%20%7B. ..obj% 2C% 20% 20c% 3A% 203% 20% 7D% 3B) và [đề xuất] (https://github.com/sebmarkbage/ecmascript-rest-spread) –
OK, vì vậy toán tử lây lan cho đối tượng literals không phải là ES6, trong khi 'Object.assign' là. – ftor