我在幫一個同事今天調試一些代碼,我發現谷歌瀏覽器與console.log()
一個奇怪的行爲:谷歌瀏覽器的console.log()不一致
看來,如果你:
創建嵌套的陣列(例如,[345, 「測試」]])
登錄陣列與
console.log()
控制檯。內陣列值的修改之一,然後
console.log()
將輸出後的值 - 不的當時的console.log()
數組的值被執行。
的JavaScript:
var test = [[2345235345,"test"]]
console.log(test);
test[0][0] = 1111111;
// outputs: [[1111111,"test"]]
var testb = {};
testb.test = "test";
console.log(testb);
testb.test = "sdfgsdfg";
// outputs: {"testb":"test"}
var testc = ["test","test2"];
console.log(testc);
testc[0] = "sdxfsdf";
// outputs: ["test","test2"]
此行爲不會在Firefox中發生。另外要注意的是,如果我在Chrome調試器中逐行逐行掃描他的代碼,那麼console.log()
會輸出正確的值。
有沒有解釋這個奇怪的現象還是隻是谷歌瀏覽器的一個錯誤?
編輯:
我已經縮小的步驟重現不一致console.log()
行爲:
如果添加這個腳本到您的網頁:
var greetings=['hi','bye'];
console.log(greetings);
setTimeout(function(){
greetings.push('goodbye');
},3000);
,並打開它Chrome 控制檯窗口已打開的新窗口,則console.log()
輸出將與加載頁面時不同與控制檯窗口關閉。 Here's a JSFiddle that demonstrates that。
在第一種情況下,在控制檯窗口已打開的情況下,console.log()
將輸出數組的當前值(即兩個項目)。
在第二種情況下,在最初關閉控制檯窗口並在之後僅打開頁面加載時,console.log()
將輸出數組的較晚值(即三個項目)。
這是Google Chrome的console.log()
功能中的一個錯誤?
雖然我不知道怎麼了,究竟這是不是一個錯誤,Chrome,但是這種以某種頻率的東西;您也可以記錄AJAX請求的結果;它追溯地填充它,大概爲了記錄時的清晰度。我太不熟練,開始解釋爲什麼,我剛剛有一個類似的問題困擾着我。但是,任何依賴於正確值的代碼都可以正常運行。 – Jonline
它似乎記錄到控制檯的值是* live *值。引用對象中的任何標量值只有在控制檯輸出中展開有問題的對象後纔會被計算 – Phil
console.log()'的結果會受到類似競爭條件的影響似乎很奇怪。當我通過我的同事代碼時,'console.log()'會輸出我們所期望的值,但在正常執行時,它會輸出一個後來修改的值 - 好像你希望數組的值在精確的時刻'console.log()'被執行。 –