2017-04-11 21 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 

をログコンソールしようとすると?

EDIT: 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())にあったことです。