2013-10-17 35 views
0

我正在處理一些處理「單元」對象的二維數組的代碼。索引到2D數組時,JavaScript類型錯誤

function randomDestFromStart(cell, temp) 
{ 
    function addPossible(x, y) 
    { 
     var test1 = temp[x]; 
     var test2 = test1[y]; // This line 
     // ... // 
    } 

    for (var i = 0; i < temp[0].length; i++) 
     addPossible(cell.x, i); 

    // ... // 
} 

temp是2D陣列,和cell是一個特定Cell對象。定義test2導致以下錯誤:

TypeError: test1 is undefined 

我已經在調試器xy是有效的整數確認(在這種特殊情況下,他們分別爲0和1)。 temp是由5個Cell對象組成的有效數組,所以不應該有任何種類的索引超出界限的錯誤。看起來似乎沒有將一個級別索引到temp的問題,因爲test1是5個單元的有效陣列(基本上是一行temp)。問題是,當我索引到數組的第二維時,這很奇怪,因爲索引到同一個確切數組中的代碼的其他部分。

編輯:問題似乎與x和y的輸入。當我硬編碼這些值時,一切正常。例如,addPossible(2, 3)的作品。當動態提供值時發生錯誤,但這很奇怪,因爲即使在這些情況下,調試器也將x和y顯示爲完全正常和有效的整數。我99%確定這不是一個界限問題。我已經檢查過,數組是5x5,x和y總是在0和4之間。

+0

請顯示數組的內容。沒有看到您想要讀取的數據,我們無法告訴您發生了什麼。 –

+0

對於迭代循環,您不應該沒有將第一級數組索引硬編碼爲0嗎? 「i Casey

+1

您可以在'addPossible'定義的最開始插入'console.log(temp)'並告訴我們它會說什麼? – Dmitry

回答

0

最有可能您的臨時數組大於cell.x中存在的任何值。它也有可能是cell.x是一個太大,你想cell.x -1

+0

是的,事實證明它畢竟是出界的,我一直在讀Firebug,因爲我從來沒有看到一個太大的值,用'console.log(x)'解決了這個問題。 – user2892232