質問: 質門 -- console.log()で出力した値が、変わるのはなぜですか? 仕様なのかバグなのかわかりません。 値が変わらない方法はわかりますか? 追記:chromeとfirefox、どちらもこの現象は起きたので、仕様なんですかね。。 追記:console.dirでもこの現象がおきました 上記の現象をみる手順 1:まずデベロッパーツールを開きます 2:ここでは予想通り"boolean"の値はtrueです。 3:デベロッパーツールを閉じます 4:10秒待ちます 5:そしてデベロッパーツールを開くと値がfalseになります ``` var obj={ "boolean":true } console.log(obj); setTimeout(function(){ obj.boolean=false; },10000); ``` 追記:変数にあらかじめ代入したらいけるかなと思いましたが無理でした。 ``` var obj={ "boolean":true } var variable=obj; console.log(variable); setTimeout(function(){ obj.boolean=false; },10000); ```
回答: 前にArrayについて調べたのですが、仕様のようです。 デベロッパーツールのコンソールでObjectやArrayなどのオブジェクトを表示する場合、その中身は「`console.log()`が評価された時」の中身では無く、「コンソール上で表示をさせた時」の中身になります。これはHTMLのノードなども同様です。プリミティブ値以外は常に変化する可能性があると思った方が良さそうです。 確実に`console.log()`が実行されたときの状態を示すには、`JSON.stringify()`でJSONの文字列として出すのが確実かと思われます。`Object.assign()`でコピーを作るというのもありますが、浅いコピーしかされないたいめ注意が必要です。また、immutable.js等を使用して、そもそもObject等が変化することが無い設計にするという手段もあります。