2017-04-11 33 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())。