JavaScript - 对象中扩展运算符的放置/顺序是否重要?

Cha*_*ish 3 javascript json object ecmascript-6 spread-syntax

在JavaScript中,扩展运算符的放置和排序是否重要?

var item = {/* key value pairs here */};
var itemB = {/* key value pairs here */};
Run Code Online (Sandbox Code Playgroud)

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

var newItem = {
    ...item,
    ...itemB
};
Run Code Online (Sandbox Code Playgroud)

var newItem = {
    ...itemB,
    ...item
};
Run Code Online (Sandbox Code Playgroud)

Cha*_*ish 10

除了键值对的一般顺序,它对对象的结果没有真正的超级主要影响,唯一的另一个区别是if itemitemB有重复的键.

例如.

var item = {firstName: "Bob"};
var itemB = {lastName: "Smith", firstName: "Tim"};
Run Code Online (Sandbox Code Playgroud)

在这种情况下,以下两个项目将不相同.

var newItem = {
    ...item,
    ...itemB
};
// {lastName: "Smith", firstName: "Tim"}
Run Code Online (Sandbox Code Playgroud)

-

var newItem = {
    ...itemB,
    ...item
};
// {lastName: "Smith", firstName: "Bob"}
Run Code Online (Sandbox Code Playgroud)

因此,如果存在重复的键,则扩展操作符的顺序很重要.

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