我想在JavaScript中混合两个对象:
let a = {x: 1, y: 2, z:3};
let b = {x:10, y: 20};
let c = Object.assign(a, b);
这为c
提供了正确的值:
Object { x: 10, y: 20, z: 3 }
但现在a
也被修改了!
Object { x: 10, y: 20, z: 3 }
有没有办法将a
分配到b
上新的对象?
assign的第一个论点是目标。所以它会改变。如果您不希望更改任何源,则可以为目标传递一个空对象:
let a = {x: 1, y: 2, z:3};
let b = {x:10, y: 20};
let c = Object.assign({},a, b);
console.log(c);
console.log(a); // a is unchanged
你可以使用spread operator:
let a = {x: 1, y: 2, z: 3};
let b = {x: 10, y: 20};
let c = {
...a,
...b
}
console.log(c);
console.log(a);
最终是传播运营商。它有助于添加单个属性,例如在JS中设置CSS样式。但请注意,它目前是EcmaScript的only in stage 4。
const lessStyle = {
color: 'blue',
backgroundColor: 'yellow'
};
const moreStyle = {...lessStyle, color: 'red'};
// lessStyle is not affected
您现在可以在Typescript和JSX中使用它。
let a = {x: 1, y: 2, z:3};
let b = {x:10, y: 20};
let c = Object.assign({},a, b);
你需要在第一个对象的assign方法中使用{},因为如果你在这里阅读Object.assign方法的文档,那么https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Parameters它声明第一个参数是目标对象,其余的是源。所以现在你将b分配给a并将新a返回给c。因此,如果您的第一个参数是空对象,则不会发生这种情况。