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

Javascript 从多个解构对象创建新对象时,覆盖顺序是什么?,javascript,object,Javascript,Object,为什么ay总是覆盖a值 如果我想以这种方式合并多个对象,我如何知道哪个将覆盖哪个 为什么ay总是覆盖a值 不是,这取决于所列的顺序x和y(请参见下文,您观察到的z.a总是“ay”是错误的)。这是因为对象初始值设定项中的属性是按顺序处理的。这与我们在这里得到的o.a42是相同的原因: let x = {a: 'ax', b: 'bx'} let y = {a: 'ay', c: 'cy'} let z = {...x, ...y} // => {a: "ay", b: "bx", c: "

为什么
ay
总是覆盖
a

如果我想以这种方式合并多个对象,我如何知道哪个将覆盖哪个

为什么ay总是覆盖a值

不是,这取决于所列的顺序
x
y
(请参见下文,您观察到的
z.a
总是
“ay”
是错误的)。这是因为对象初始值设定项中的属性是按顺序处理的。这与我们在这里得到的o.a
42是相同的原因:

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"}
…什么是覆盖顺序

最后的胜利


请注意,结果与您描述的不同:

设x={a'ax',b'bx'}
设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}
//注----------------------------^^^^
。作为控制台包装器{
最大高度:100%!重要;

}
我在您的代码中没有看到任何解构?对象扩散不在ES6中。第二个
z
输出将是
{a:“ax”,c:“cy”,b:“bx”}
右侧将覆盖左侧。我无法重现问题:@ilyo如果你复制粘贴了你发布的全部内容,它应该抛出一个
语法错误:标识符“z”已经声明了
OP报告说对于
{…y,…x}
,第一个赢了。@Quentin:如果是这样,他们只是搞错了。或者他们有一个奇怪的,buggy JS引擎。@Quentin最后一个赢了。@zabusa-这就是为什么我在这个问题上发表评论说我无法重现这个问题。
const o = {
    a: 67,
    a: 42
};