5

重複の可能性:
ChromeのJavaScriptコンソールは配列の評価に怠惰ですか?

Chromeのjsコンソールには、値が削除される前に値が削除された配列が表示されています。なんで?

この動作を示すjsFiddle

var list=[];
list.push("one");
list.push("two");
list.push("three");
console.log(list);                        //["two", "three", undefined × 1] 
$("#output").append(JSON.stringify(list));//["one","two","three"]

list.shift();

$("#output").append($("<br>"));

console.log(list);                        //["two", "three"] 
$("#output").append(JSON.stringify(list));//["two","three"]

</ p>

4

1 に答える 1

6

Chromeconsole.logでは「遅延」します。この場合、プログラムの最後まで私は信じています。

つまり、Chromeではconsole.log 、入力オブジェクトをすぐに文字列化するのではなく、「しばらくして」(この場合はオブジェクトが変更された後)、実際に結果を表示する前に文字列化を実行します。

console.log(JSON.stringify(list))期待される結果が表示されます。


これはChrome5までさかのぼるバグとして報告され(バグ修正ターゲットはMstone-22であり、Chrome 20/21ではありませんか?)、修正がWebkitベースに追加されました。

現在のところ、オブジェクト(配列)をコンソールにダンプすると、コンソールオブジェクトの展開時にオブジェクトのプロパティが読み取られます(つまり、遅延します)。これは、変更中に同じオブジェクトをダンプすると、コンソールを使用してデバッグするのが困難になることを意味します。

この変更により、ロギングの瞬間にオブジェクト/配列の簡略化されたプレビューの生成が開始され、この情報がフロントエンドに渡されます。これは、フロントエンドがすでに開かれている場合にのみ発生します。これは、console.log()に対してのみ機能し、ライブコンソールの相互作用に対しては機能しません。

于 2012-10-09T03:21:53.570 に答える