是否有 Object.assign 的不可变版本?
Is there an immutable version of Object.assign?
我想在 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
到一个新对象中?
您可以使用 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);
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
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。因此,如果您的第一个参数是空对象,则不会发生这种情况。
绝对是传播运算符。它有助于添加单个 属性,如 JS 中的样式 CSS。但请注意,它目前是 EcmaScript 的 only in stage 4。
const lessStyle = {
color: 'blue',
backgroundColor: 'yellow'
};
const moreStyle = {...lessStyle, color: 'red'};
// lessStyle is not affected
你现在可以在 Typescript 和 JSX 中使用它。
我想在 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
到一个新对象中?
您可以使用 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);
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
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。因此,如果您的第一个参数是空对象,则不会发生这种情况。
绝对是传播运算符。它有助于添加单个 属性,如 JS 中的样式 CSS。但请注意,它目前是 EcmaScript 的 only in stage 4。
const lessStyle = {
color: 'blue',
backgroundColor: 'yellow'
};
const moreStyle = {...lessStyle, color: 'red'};
// lessStyle is not affected
你现在可以在 Typescript 和 JSX 中使用它。