2011-12-01 25 views
1

我一直無法重現此問題與其他腳本,請運行該腳本:奇怪console.logbehavior

 
for (myKey in v){ 
    console.log("v["+myKey +"] = "+v[myKey]); 
} 
console.log(v); 
http://jsfiddle.net/kz4k7/

正如你可以在線看154-157

你會希望前三行輸出相同的最後一行。 不過,我得到這樣的結果在鉻: enter image description here

如果我在線路158(V)去除solveTriangle中,console.log(v);工作完全正常。如果我將對象v的克隆版本打印到控制檯,它也可以工作。

注意:這完全沒有完成,我只想知道爲什麼chrome會這樣做。我也不想解釋「你爲什麼這樣做?」和其他與這個bug無關的問題。

編輯:

這也是Safari中的行爲。

火狐+螢火蟲截圖:

enter image description here

回答

1

console.log顯示了對象包含當你打開它(點擊箭頭),而不是當它被記錄下來。坦率地說,你的代碼非常冗長,並且有很多註釋掉的代碼很混亂,但是看起來你確實在記錄它之後修改了這個對象。

您可以通過以下簡化測試來確認此日誌行爲:http://jsfiddle.net/e7Gvn/

var o = { 
    a: 1, 
    b: 2 
}; 

console.log(JSON.stringify(o)); // force string logging, which doesn't change 

console.log(o); // open the object and you'll see that `c = 3`... 
o.c = 3;  // ... even though it was only set here 
+0

爲什麼「v」的值會改變? – Tyilo

+0

@Tyilo:因爲你在記錄後修改它。 – pimvdb

+0

噢,謝謝你.. – Tyilo

2

這是一個相當簡單的問題。 Chrome存儲對該對象的引用。如果在腳本完成後查看對象,則會看到此觀察行爲,因爲該對象已更改,與console.log解僱時不同。

如果在包含console.log(v);的行上設置斷點並檢查該值,則結果將是您的預期結果。