2015-04-28 35 views
1

當我將我的Uint8Array console.log添加到chrome dev控制檯時,我可以擴展它的內容並查看所有元素。當我console.log訪問該數組,比如array [512]時,我看不到我擴展它時看到的內容。javascript Uint8Array訪問不返回預期結果(與在Chrome控制檯中擴展數組內容相比)

console.log(this.memory);  // logs [0, 0, 0, ......] 
console.log(this.memory[512]); // logs 0 

當我擴大從第一日誌中的陣列,我可以看到,索引512的值是34,不爲0

這裏是:

實施例從我的源代碼直接採取從我的控制檯的屏幕截圖:

enter image description here

正下方的是,數字0從當我登錄this.memory [512]記錄。我試着用for循環遍歷數組,以確保雙重確定。註銷全部0!我不知道還有什麼要嘗試。

更新:更怪異。我將該陣列附加到窗口,以便在控制檯中播放它:

window.memory = this.memory 
// now in chrome, lets see what happens 
window.memory[512]; 
-> 34 

這裏是一個幾乎包含我所有代碼的jsfiddle。奇怪發生在113-116線周圍。這是正在進行chip8模擬器工作:https://jsfiddle.net/ybd6ntks/2/

更新2:如果我從我的源代碼運行window.memory[512];,我得到0。如果我從鉻控制檯中運行window.memory[512];,我得到34

+1

這是很奇怪的行爲,當然,你的代碼可以在[fiddle](http://jsfiddle.com)中幫我們調試嗎? – Downgoat

+0

'this.memory'快速變化嗎?在Chrome中,'console.log'是異步的。當你使用'console.log(memory)'的時候,Chrome可能不會顯示元素512的值,直到*顯示console.log(memory [512])的結果之後,因爲後者比訪問和顯示。在Chrome能夠顯示大型陣列的時候,所有的可能性都發生了變化。解決方法雖然比較差,但是要做'console.log(JSON.stringify(memory))'。 –

+0

@Jordan我試過你的建議,我得到了同樣的結果。 – chillpenguin

回答

0

原來這是一個異步的問題。我通過等待,直到我確信在繼續使用該程序之前已經完全更新了該陣列。我在最後一個字節上設置了一個標誌,並檢查它是否設置。如果沒有,我設置了Timeout並再次嘗試。

相關問題