2016-07-19 23 views
5

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}); 

obj = {...obj, c: 3 }; 
+0

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) –

+0

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

Trả lời

16

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

+0

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

Các vấn đề liên quan