es7对象扩展表示法如何创建浅拷贝来替换原始对象
How does es7 object spread notational create a shallow copy to replace original object?
我正试图从这里学习Redux以及es7,并且很难理解作者下面关于以下代码的观点:
还要注意,这个ES7对象扩展符号适合我们的示例因为它在做{message: action.value的浅拷贝}超过我们的状态(意思是状态
的第一级属性完全覆盖-而不是优雅地合并-由{message: action的第一级属性。值})。
var reducer_3 = function (state = {}, action) {
console.log('reducer_3 was called with state', state, 'and action', action)
switch (action.type) {
case 'SAY_SOMETHING':
return {
...state,
message: action.value
}
default:
return state;
}
}
状态的第一级属性是如何被{message: action覆盖的?当作者使用对象扩展表示法时,简单地添加消息:action。值键/值对到原始状态?第一层状态属性仍然存在因为对象扩展符号,对吧?因此,如果原始状态为{a:"foo", b:"bar"}
,则调度SAY_SOMETHING
的动作后的新状态为{a:"foo", b:"bar", message: 'SAY_SOMETHING}
,对吗?
它只会在替换现有属性时重写。所以,你的例子完全正确。作者提到,它会做一个浅合并,这将覆盖现有的键,但给出了一个例子,只是添加了一个属性,如你所说的。也许发个公关来澄清一下:)
当使用扩展操作符创建新对象时,它的行为与object完全相同。赋值或_。用下划线/虚线扩展,用一个空对象字面值作为第一个参数。所以,这些都是等价的…
Object.assign({}, a, b)
_.extend({}, a, b)
{ ...a, ...b }
正如您在Babel REPL中看到的那样,Babel只是将此语法转换为Object.assign
(如果可用)或Object.assign
相关文章:
- JavaScript名称空间和对象创建
- 从不同的对象创建阵列
- Nodejs-从对象创建可读流
- Javascript对象创建实践
- 插件SDK中的动态或计算对象创建
- 为json对象创建一个动态表
- 对象.创建解释
- 从对象创建嵌套数组失败
- 从JSON对象创建具有超链接的HTML表
- 如何将文档对象创建为HTML页面
- 创建一个类,该类使用es6类语法将Function对象创建为实例
- KineticJS在对象创建(NOOB)后更改属性
- 对象创建中的JavaScript && notation
- Javascript对象创建-创建许多对象
- 从另一个JSON对象创建JSON对象
- 使用linq.js从多个对象创建JSON对象数组
- 如何使用Immutable.js从javascript原始对象创建记录映射
- 在fabric.js中初始化对象创建的子类
- Angularfire:从$FirebaseObject的子对象创建$FirebaseObject
- 为JSON对象创建CRUD