Console.log 内のオブジェクトの非同期動作
console.log を使用してオブジェクトを調べるときは、その非同期の性質を認識することが重要です。コンソールはオブジェクト参照を同期的に受信しますが、そのプロパティは展開されたときにのみ表示されます。検査前にオブジェクトが変更されると、不一致が生じる可能性があります。
次のコードを考えてみましょう:
foo = [{id: 1},{id: 2},{id: 3},{id: 4}, {id: 5}, ]; console.log('foo1', foo, foo.length); foo.splice(2, 1); console.log('foo2', foo, foo.length);
Chrome では、次の出力が生成されます:
foo1 [Object, Object, Object, Object, Object] 5 0: Object 1: Object 2: Object 3: Object length: 4 __proto__: Array[0] 5 (index):23 foo2 [Object, Object, Object, Object] 4 0: Object 1: Object 2: Object 3: Object length: 4 __proto__: Array[0]
最初に、console.log はオブジェクト foo への参照を受け取ります。ただし、プロパティは、オブジェクトが foo.splice(2, 1) によって変更された後に表示されます。したがって、出力には更新された値が表示されます。
この問題を軽減するには、いくつかの代替ログ手法があります。
console.log(foo.id, foo.name, foo.age);
console.log(JSON.stringify(foo));
console.log(JSON.parse(JSON.stringify(foo)));
これらのメソッドログ出力がログ出力時のオブジェクトの状態を反映していることを確認します。
以上が「console.log」に非同期オブジェクトの動作が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。