Object.assign和对象扩展运算符的区别

11

具有

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

什么是它们之间的不同之处?

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

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

检查已编译版本提案 - Yury Tarabanko
好的,所以对象字面量的扩展运算符不是ES6的一部分,而Object.assign是。 - user6445533
1个回答

38

使用展开运算符时,不同之处在于您总是会创建一个新对象:

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

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

然而,使用Object.assign可以改变现有对象:

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

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

通过将空对象字面量作为第一个参数传递,您仍然可以使用Object.assign 实现对象展开的行为:

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

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


2
因为你无法使用对象展开指定目标,也无法改变现有对象,所以它比Object.assign更安全且更简洁。 - user6445533
因此,对象扩展比Object.assign更可取和更安全。 - Siluveru Kiran Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接