Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript {something:value}和&;赋值({},{something:value})_Javascript - Fatal编程技术网

Javascript {something:value}和&;赋值({},{something:value})

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

我正在学习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, { 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
用于创建对象的浅层副本,在这种情况下,它看起来没有必要。