2017-04-11 35 views
0

怪异的行为我坚持与分配的JavaScript中的奇怪行为。与Object.assign

在此代码

state = Object.assign({}, state, { 
     [area]: Object.assign({}, state[area], { 
      [name] : Object.assign({}, state[area][name], { 
      selected: [value] 
      }) 
     }) 
     }) 

console.log(state) //state[area][name].selected is unchanged! 

,但如果我尝试控制台登录Object.assign

console.log(Object.assign({}, state, { 
       [area]: Object.assign({}, state[area], { 
       [name] : Object.assign({}, state[area][name], { 
        selected: [value] 
       }) 
       }) 
      })); 
//it returns object with value in obj[area][name].selected, as expected 

做什么,我错了吗?

编辑: wat

+2

我在这里找不到问题,代码工作正常(请参阅http://jsbin.com/ceburo/edit?js,console)。问题一定在其他地方。 – devnull69

+2

关于'console.log'的有趣之处在于输出是* live *。在你的最后一行尝试'console.log(JSON.stringify(state,null,''))' – Phil

+0

谢谢你的评论!我认为这个问题已经穷尽了。我的问题不在console.log中。谢谢! –

回答

0

Object.assign正常工作。 在这种情况下,问题在于console.log显示的不是实际数据,而是对该对象的引用。 我真正的问题是在一些反应组件中突变状态(array.pop())。