7

非常に奇妙な問題。

私のデバッグでは、console.dir(anArray) がブラウザーの firebug コンソールに現在の値を出力していないことがわかりました。

例えば、

console.dir(anArray)              //line 1
console.log(anArray[0].prop1)     //line 2
code to change the value of anArray[0].prop1  //line 3

anArray は javascript/json オブジェクトの配列です。

Firbug のコンソールでは、1 行目で 3 行目で設定された新しい値が出力されます。

2行目は古い値で、私が欲しいものです。

唯一の説明は、console.dir() が非同期であることですよね?!

私の環境:Windows7、Firefox 6.0.2、firebug 1.9.1、javascript libはDOJOです(しかし、私はそれとは何の関係もないと思います.)

ありがとう。

4

4 に答える 4

2

console.dir (少なくともChromeでは、私の経験から判断すると、これによって)大きなことは、呼び出しの瞬間ではなく、展開を行った瞬間に、展開がオブジェクトの現在の値を評価て表示することですconsole.dir().

例を参照してください

<html><body> open/refresh this with the javascript console open
<script>
 var ar = new Float32Array(1);
 ar[0]=2;   
 console.log(ar[0]);
 console.dir(ar);   
 ar[0]=200; 
</script>

コンソールで配列を展開すると、値 200 が表示されます。

これはバグではなく、確かにパフォーマンスの問題 (オブジェクトが非常に大きくなる可能性があります) ですが、動作が奇妙で、混乱を招く可能性があります。

さらに、後で値が変更された場合、コンソールはそれを更新しないことをテストしました (したがって、デバッガーの「ウォッチ」ウィンドウとしても機能しません)。

于 2013-02-23T15:23:53.470 に答える
0

コンソールログは時々そのようにバグアウトします。また、オブジェクトや XML ドキュメントなどを印刷できない Internet Explorer (バグを見つけるのが一般的な場所) では、それほど強力ではありません。

console.log を使用する代わりに、ブラウザーが提供する強力なデバッガーの使用方法を学ぶことをお勧めします。ブレークポイントで一時停止すると、すべての変数を検査し、コンソールで任意のステートメントを実行し、スタック トレースを上下に移動できます。

于 2012-03-13T12:50:20.113 に答える
0

これは Firefox と Chrome の両方のバグです: コンソールで実行:

console.log(a = {b: { c: 0}});
a.b.c = 1;

Firebug での結果:

b: Object { c= 1 }

Chrome での結果:

b: Object
    c: 1
于 2012-09-21T10:00:37.190 に答える
0

要するに、はい。:)

過去にChromeでコンソールの結果を理解できない同様の問題がありましたが、いくつかのテストを実行したところ、それが非同期動作であることがわかりました. 実際、私の最善の策は、内部的に setTimeout() を使用してログを遅らせることです。私の場合も console.log が影響しているようです。

于 2012-03-13T10:30:11.373 に答える