Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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 es7 object spread notational如何创建一个浅拷贝来替换原始对象?_Javascript_Reactjs_Redux_Ecmascript Next - Fatal编程技术网

Javascript es7 object spread notational如何创建一个浅拷贝来替换原始对象?

Javascript es7 object spread notational如何创建一个浅拷贝来替换原始对象?,javascript,reactjs,redux,ecmascript-next,Javascript,Reactjs,Redux,Ecmascript Next,我正试图从中学习Redux和es7,但很难理解作者关于以下代码的观点: 还要注意,这个ES7对象扩展表示法适合我们的示例 因为它正在做{message:action.value]的浅拷贝 }在我们的州(意味着州的一级属性 被完全覆盖(而不是优雅地合并) {message:action.value}的第一级属性 当作者使用对象扩展表示法将message:action.value键/值对添加到原始状态时,{message:action.value}如何覆盖状态的第一级属性?由于对象扩展表示法,状态的

我正试图从中学习Redux和es7,但很难理解作者关于以下代码的观点:

还要注意,这个ES7对象扩展表示法适合我们的示例 因为它正在做{message:action.value]的浅拷贝 }在我们的州(意味着州的一级属性
被完全覆盖(而不是优雅地合并) {message:action.value}的第一级属性


当作者使用对象扩展表示法将message:action.value键/值对添加到原始状态时,{message:action.value}如何覆盖状态的第一级属性?由于对象扩展表示法,状态的第一级属性仍然存在,对吗?因此,如果原始状态是
{a:“foo”,b:“bar”}
则在调度
SAY_SOMETHING
操作后的新状态将是
{a:“foo”,b:“bar”,消息:“SAY_SOMETHING}
,对吗?未替换任何内容。

它仅在替换现有属性时覆盖。所以,你的例子是完全正确的。作者提到它将进行浅层合并,这将覆盖现有键,但给出了一个示例,如您所说,它只是添加了一个属性。可能会发送一份公关来澄清:)

使用spread操作符创建新对象时,它的行为与下划线/Lo破折号完全相同,第一个参数为空对象文字。所以,这些都是等价的

Object.assign({}, a, b)
_.extend({}, a, b)
{ ...a, ...b }

正如您在中所看到的,Babel只需将此语法转换为
Object.assign
(如果可用)或
Object.assign

{…a,b:1}==Object.assign({},a,b:1}
对象扩展是一个建议。它不是ES7的一部分。如果属性已经处于
状态,它将被替换。
Object.assign({}, a, b)
_.extend({}, a, b)
{ ...a, ...b }