2013-05-10 71 views
10

我有以下代碼:的console.log(陣列)顯示出比迭代陣列和顯示各個元件的不同陣列內容

console.log("start"); 
for(var i = 0; i < array.length; i++){ 
    console.log(i + " = " + array[i]); 
} 
console.log(array); 
console.log("end"); 

這使我下面的輸出:

[16:34:41.171] start 
[16:34:41.171] 0 = 0 
[16:34:41.172] 1 = 168 
[16:34:41.172] 2 = 171 
[16:34:41.172] [0, 168, 171, 139] 
[16:34:41.172] end 

即是,它在迭代數組時不顯示139元素,但是console.log在輸出整個數組時將打印它。爲什麼? (< - 問題)

我稍後修改數組,是不是console.log延遲,直到我改變了數組後?請注意,改變語句的順序,直接在開始處放置consoel.log(array)不會改變結果(仍然是不同的輸出)。

我使用的Firefox 20.0

+2

你的數組在哪裏定義?我沒有看到你是什麼:http://jsfiddle.net/j08691/vJd6x/ – j08691 2013-05-10 14:43:12

+1

[JavaScript:console.log()給出的結果可能與alert()]不同(http://stackoverflow.com/問題/ 15528322/javascript-console-log-gives-different-results-alert) – 2013-05-10 14:46:02

+0

數組是一個對象屬性嗎? http://stackoverflow.com/questions/8249136/why-does-javascript-object-show-different-values-in-console-in-chrome-firefox/8249333#8249333 – 2013-05-10 14:47:22

回答

14

更新:如果你想看到這種行爲,複製和粘貼代碼在控制檯和執行。然後關閉開發人員工具並再次打開,顯然指針只在代碼在後臺執行時發生(當您重新打開控制檯時會發生這種情況)。

Console.log輸出對象,是一個指針,沒有一個真正的值。這意味着如果對象稍後更改,則會更新console.log對象。嘗試:

console.log("start"); 
var array = [1]; 
for(var i = 0; i < array.length; i++){ 
    console.log(i + " = " + array[i]); 
} 
console.log(array); 
console.log("end"); 
array.push(9999);// you will see the 9999 in the console no matter it was added after the output. 

爲了防止指針問題,試試這個: 的console.log(array.join());因爲稍後在應用程序的某個時刻,您將添加139值。