【发布时间】:2016-09-22 13:59:52
【问题描述】:
我在http://jsbin.com/givolafala/edit?html,js,console,output 有一个示例 JSBin 代码
var oldObject = { name: 'John', address: { city: 'new york'}};
var newObject = Object.assign({}, oldObject);
console.log(oldObject);
console.log(newObject);
newObject.name = 'Mathew';
newObject.address.city = 'los angeles';
console.log(oldObject);
console.log(newObject);
在本例中,我将顶层的 name 从 John 更改为 Mathew。 Object.assign 返回具有新名称 Mathew 的新状态。 oldObject 保持其先前的值 John。
如果我在根目录以外的任何级别更改任何值,它就不起作用。在示例中,我将城市更改为los angeles,您会注意到newObject 和oldObject 具有相同的城市los angeles。所以oldObject 状态发生了变异。
这是一个错误吗?
【问题讨论】:
-
如果你想要一个递归 Object.assign 看看deep-assign
标签: javascript ecmascript-6 javascript-objects