2016-07-19 5 views
5

Unterschied zwischen Object.assign und Objekt verteilt

Mit
var obj = { a: 1, b: 2}; 

Was sind die Unterschiede zwischen

obj = Object.assign(obj, { c: 3}); 

Und

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

Check [kompilierte Version] (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) und [Vorschlag] (https://github.com/sebmarkbage/ecmascript-rest-spread) –

+0

OK, also der Spread-Operator für Objekt Literale ist nicht ES6, während 'Object.assign' ist. – ftor

Antwort

16

Der Unterschied ist, dass, wenn eine Ausbreitung verwenden Sie immer Erstellen eines neuen Objekts:

const a = { name: 'Joe Bloggs' } 
 
const b = { ...a, age: 27 }; 
 

 
console.log(a === b) //=> false

Verwendung jedoch Object.assign Es ist möglich, ein bestehendes Objekt zu mutieren:

const a = { name: 'Joe Bloggs' } 
 
const b = Object.assign(a, { age: 27 }); 
 

 
console.log(a === b) //=> true

Sie können das Verhalten eines Objekts Aufstrich mit Object.assign durch ein erzielen vorbei Objektliteral als erstes Argument:

const a = { name: 'Joe Bloggs' } 
 
const b = Object.assign({}, a, { age: 27 }); 
 

 
console.log(a === b) //=> false

+0

Da Sie kein Ziel mit Objektverteilung angeben können und daher vorhandene Objekte nicht mutieren können, ist es tatsächlich sicherer als "Objekt.Zuordnung" und mehr Nutzen. – ftor

Verwandte Themen