2012-03-13 41 views
7

一個非常奇怪的問題。是javascript還是firefox異步的console.dir()?

在我的調試中,我發現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()是異步的,對吧?!

我ENV: Windows7中,火狐6.0.2,1.9.1螢火蟲,JavaScript的LIB是道場(但我認爲沒有什麼用它做。)

感謝。

回答

0

簡而言之,是的。 :)

我在過去沒有理解我的控制檯結果有類似的問題,但我跑了一些測試,然後發現它是異步行爲。實際上,我最好的選擇是使用setTimeout()來延遲日誌。在我的情況下,console.log似乎也受到影響。

0

控制檯日誌有時會出現這種錯誤。它在Internet Explorer(尋找錯誤的常見位置)中功能也不那麼強大,它無法打印對象和XML文檔等內容。

我建議您不要使用console.log而是嘗試學習如何使用瀏覽器提供的強大調試器。當您在斷點處暫停時,您可以檢查所有變量,在控制檯上運行任意語句並沿着堆棧跟蹤上下移動。

0

它在Firefox和Chrome中的錯誤: 運行控制檯:

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

結果在Firebug:

b: Object { c= 1 } 

結果在Chrome:

b: Object 
    c: 1 
2

console.dir大的東西(至少在Chrome中,由我的經驗判斷,並由this)是擴展評估並顯示在您執行擴展時的對象的值,而不是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。

它不應該是一個bug,它肯定是一個性能方面的東西(對象可能非常大),但行爲很奇怪,並且可能會讓人困惑。此外,我測試過,如果此後的值發生變化,控制檯不會更新它(因此它不能在調試器中作爲「監視」窗口工作)。

相關問題