オブジェクトと console.log の複雑な動作
console.log() 関数を使用してオブジェクトを調べると、特有の現象が発生する可能性があります。結果。たとえば、オブジェクトの配列をログに記録し、それを splice() を使用して変更すると、コンソールには元の配列が表示されたままであることがわかります。
この問題が発生する理由
Console.log はオブジェクトを非同期的に検査します。コンソールはオブジェクトへの参照を同期的に取得しますが、オブジェクトを展開するまでプロパティの表示を延期します (この動作はブラウザーによって異なります)。したがって、オブジェクトが検査前に変更された場合、表示されるデータには更新された値が含まれます。
不一致の特定
Chrome は、これを警告する視覚的な合図を提供します。行動。オブジェクトの上にマウスを置くと、ボックスに小さな「i」が表示され、次のメッセージが表示されます。「左のオブジェクトの値はログに記録されたときにスナップショットされ、下の値は今評価されました。」
問題への対処
この不一致を回避するには、個々のオブジェクトのプロパティをログに記録することを検討してください。値:
console.log(obj.foo, obj.bar, obj.baz);
あるいは、JSON.stringify():
console.log(JSON.stringify(obj));
を使用してオブジェクトを JSON 文字列に変換できます。もう 1 つのアプローチは、再実行してオブジェクトの検査可能性を保持することです。 JSON.parse():
console.log(JSON.parse(JSON.stringify(obj)));
でエンコードします。ただし、JSON は削除することに注意してください。関数や DOM 要素などのシリアル化できないプロパティ。複雑なオブジェクトの場合は、堅牢なディープ コピー メカニズムを採用して、そのようなプロパティを保持します。
以上が変更後に「console.log()」に予期しないオブジェクト値が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。