ホームページ  >  記事  >  ウェブフロントエンド  >  Console.log() は Google Chrome でオブジェクトと配列を正しく出力しますか?

Console.log() は Google Chrome でオブジェクトと配列を正しく出力しますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-20 12:30:02434ブラウズ

Does Console.log() Correctly Output Objects and Arrays in Google Chrome?

Console.log() Google Chrome のオブジェクトおよび配列との不一致

Console.log()、Google Chrome のデバッグ ツール、オブジェクトや配列とともに使用すると、独特の動作を示します。この異常は次の場合に発生します。

  1. ネストされた配列が作成される (例: [[345,"test"]])。
  2. 配列がコンソールに記録される。
  3. 内部の配列値が変更され、その後 console.log() は実行時の配列の値ではなく、変更された値を表示します。
<code class="javascript">var test = [[2345235345,"test"]]
console.log(test);
test[0][0] = 1111111;
// outputs: [[1111111,"test"]]

var testb = {};
testb.test = "test";
console.log(testb);
testb.test = "sdfgsdfg";
// outputs: {"testb":"test"}

var testc = ["test","test2"];
console.log(testc);
testc[0] = "sdxfsdf";
// outputs: ["test","test2"]</code>

興味深いことに、この動作はChrome 専用です。 Firefoxでは表示されません。さらに、Chrome デバッガーでコードを 1 行ずつ実行すると、console.log() に正しい値が表示されます。

現象の起源

さらに調査を進めると、これは Webkit では解決されているが、Google Chrome にはまだ組み込まれていない既知のバグであることが判明しました。このバグは 2010 年 3 月に最初に報告され (https://bugs.webkit.org/show_bug.cgi?id=35801)、修正は 2012 年 8 月に実装されました。ただし、このバグはまだ Chrome には組み込まれていません。

コンソール状態の影響

console.log() の動作は、コンソール ウィンドウの状態に影響されます。スクリプトのロード時にコンソール ウィンドウが開いている場合、console.log() は配列とオブジェクトの現在の値を表示します。ただし、スクリプトのロード後にコンソール ウィンドウを閉じて開いた場合、console.log() の実行後に変更された場合でも、console.log() には変更された値が表示されます。

<code class="javascript">var greetings=['hi','bye'];
console.log(greetings);
setTimeout(function(){
    greetings.push('goodbye');
},3000);</code>

If上記のスクリプトは、コンソール ウィンドウがすでに開いている状態で実行され、console.log() には 2 つの項目が表示されます。ページの読み込み後にコンソール ウィンドウを閉じて再度開くと、console.log() には配列の変更された状態を反映する 3 つの項目が表示されます。

この特殊性は、Google Chrome の console.log() 機能に潜在的なバグがあることを示唆しています。 、現在のバージョンの Chrome では未修正のままです。

以上がConsole.log() は Google Chrome でオブジェクトと配列を正しく出力しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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