从多个解构对象创建一个新对象,覆盖顺序是什么?

时间:2017-12-11 11:56:42

标签: javascript object

let x = {a: 'ax', b: 'bx'}
let y = {a: 'ay', c: 'cy'}

let z = {...x, ...y} // => {a: "ay", b: "bx", c: "cy"}
let z = {...y, ...x} // => {a: "ay", c: "cy", b: "bx"}

为什么ay始终覆盖a值?

如果我想以这种方式合并多个对象,我怎么知道哪个会覆盖哪个?

1 个答案:

答案 0 :(得分:0)

  

为什么ay总是覆盖一个值?

它没有,这取决于订单xy的列出(见下文,z.a总是"ay"的错误观察)。这是因为对象初始值设定项中的属性按顺序处理。这与我们最终o.a在这里结果为42的原因相同:

const o = {
    a: 67,
    a: 42
};
  

...什么是覆盖顺序?

最后胜利。

请注意,结果不是您所描述的:

let x = {a: 'ax', b: 'bx'}
let y = {a: 'ay', c: 'cy'}

console.log({...x, ...y}) // => {a: "ay", b: "bx", c: "cy"}
console.log({...y, ...x}) // => {a: "ax", c: "cy", b: "bx"}
// Note -------------------------^^^^^^^
.as-console-wrapper {
    max-height: 100% !important;
}