JavaScript - 对象中展开运算符的 placement/order 重要吗?

JavaScript - Does the placement/order of spread operator in an object matter?

在 JavaScript 中,展开运算符的放置和排序重要吗?

var item = {/* key value pairs here */};
var itemB = {/* key value pairs here */};

例如,在下面的代码片段中,newItem 总是具有相同的键值对吗?

var newItem = {
    ...item,
    ...itemB
};

作为

var newItem = {
    ...itemB,
    ...item
};

除了键值对的一般顺序之外,这对对象的结果并没有太大的影响,唯一的区别是 itemitemB 有重复的键。

例如

var item = {firstName: "Bob"};
var itemB = {lastName: "Smith", firstName: "Tim"};

在这种情况下,以下两项将不相同。

var newItem = {
    ...item,
    ...itemB
};
// {lastName: "Smith", firstName: "Tim"}

-

var newItem = {
    ...itemB,
    ...item
};
// {lastName: "Smith", firstName: "Bob"}

因此,如果存在重复键,则展开运算符的顺序很重要。

如果您希望为对象提供默认键值对,这将特别有用。您可以将默认键值对放在展开运算符之前,如果它们不存在于展开运算符中使用的对象中,它将作为新对象的默认值。