AvereDifferenza tra Object.assign e l'oggetto si diffuse
var obj = { a: 1, b: 2};
Quali sono le differenze tra
obj = Object.assign(obj, { c: 3});
E
obj = {...obj, c: 3 };
AvereDifferenza tra Object.assign e l'oggetto si diffuse
var obj = { a: 1, b: 2};
Quali sono le differenze tra
obj = Object.assign(obj, { c: 3});
E
obj = {...obj, c: 3 };
La differenza è che quando si utilizza uno spread si è sempre creazione di un nuovo oggetto:
const a = { name: 'Joe Bloggs' }
const b = { ...a, age: 27 };
console.log(a === b) //=> false
Tuttavia usando Object.assign
è possibile mutare un oggetto esistente:
const a = { name: 'Joe Bloggs' }
const b = Object.assign(a, { age: 27 });
console.log(a === b) //=> true
È ancora possibile ottenere il comportamento di uno spread oggetto con Object.assign
passando un oggetto letterale come primo argomento:
const a = { name: 'Joe Bloggs' }
const b = Object.assign({}, a, { age: 27 });
console.log(a === b) //=> false
Poiché non è possibile specificare un obiettivo con la diffusione dell'oggetto e quindi non è possibile modificare gli oggetti esistenti, è in realtà più sicuro di "Object.assign" e di più consice. – ftor
Controllare [versione compilata] (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) e [proposta] (https://github.com/sebmarkbage/ecmascript-rest-spread) –
OK, quindi l'operatore di spread per oggetto letterali non è ES6, mentre 'Object.assign' è. – ftor