Javascript {something:value}和&;赋值({},{something:value})
我正在学习react&redux。我想找出这两种代码之间的区别Javascript {something:value}和&;赋值({},{something:value}),javascript,Javascript,我正在学习react&redux。我想找出这两种代码之间的区别 export default function xReducer (state = [], action) { switch (action.type) { // I am simply assigning my key value to the action property case 'SOMETHING': { return [ ...state, { myKe
export default function xReducer (state = [], action) {
switch (action.type) {
// I am simply assigning my key value to the action property
case 'SOMETHING': {
return [ ...state, { myKey: action.x } ]
}
// I am using Object.assign
case 'SOMEMORE': {
return [ ...state, Object.assign({}, { myKey: action.x }) ]
}
}
}
就我所知,在这个特殊的例子中,没有区别。使用
Object.assign
组合可能存在重叠关键点的多个对象,以便右侧对象中这些关键点的值覆盖左侧对象中的值。典型示例如下所示:
let options = Object.assign({}, defaultOptions, passedOptions)
在这种情况下,由于合并的对象只有一个空对象和一个文本对象,因此结果与文本对象本身相同。在示例中使用
Object.assign
。
Object.assign
创建浅拷贝。基本上使用Object.assign
将创建一个对象的新实例,保持原始对象不变。在React
术语中,都是关于保持对象不变
var obj1 = {prop1: "A"};
var obj2 = Object.assign({}, obj1);
obj1 === obj2; //false as they are 2 different instances
这可以通过以下方式实现:
var obj2 = {
prop1: obj1.prop1
};
obj1 === obj2; //false as they are 2 different instances
请注意,Object.assign
适用于基本类型(string
,number
,boolean
适用于最重要的类型),因为它们都是不可变的类型(无法更改)<代码>对象。分配不会创建引用类型的新实例,例如数组
,函数
,对象
,空
,未定义
例如:
var obj3 = {
fn: function() {}
};
var obj4 = Object.assign({}, obj3);
obj3.fn === obj4.fn; //true as Object.assign will not create a new instance of fn
正确使用时,Object.assign
功能强大,用途广泛
请参阅Mozilla页面:从技术上讲,这只是ES6,与React或Redux没有任何关系。times
对象的Mosto。assign
用于创建对象的浅层副本,在这种情况下,它看起来没有必要。