ホームページ >ウェブフロントエンド >jsチュートリアル >「console.log」に非同期オブジェクトの動作が表示されるのはなぜですか?

「console.log」に非同期オブジェクトの動作が表示されるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-20 03:28:14150ブラウズ

Why Does `console.log` Show Asynchronous Object Behavior?

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);
  • オブジェクトを次のように JSON エンコードします。文字列:
console.log(JSON.stringify(foo));
  • 検査可能性を維持するためにオブジェクトを JSON 再エンコードします:
console.log(JSON.parse(JSON.stringify(foo)));

これらのメソッドログ出力がログ出力時のオブジェクトの状態を反映していることを確認します。

以上が「console.log」に非同期オブジェクトの動作が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。