2013-03-10 58 views
2

所以我試圖建立一個數組通過兩個「for」循環,每個級別的多維數組。嵌套的Javascript循環產生奇怪的結果

變量:

var pos = new Array(); 
var scales = [ 
    2, // Background 
    0.9, // Slide_1 (farthest back) 
    1, // Slide 2 
    1.15 // Slide 3 
]; 

下面是代碼:

for(j = 0; j < 5; j++) { 
    var nextPosition = 0; 
    for(var i = 0; i < numZones; i++) { 
    alert(j + '' + i); 
    pos[j][i] = nextPosition; 
    nextPosition = (nextPosition + screenWidth + bufferSize)/scales[j]; 
    } 
} 

它將通過第一層細迭代,但是當它翻轉到第二層,螢火蟲是扔一個模糊的錯誤在pos[j][i] = nextPosition行。它聲稱

TypeError: can't convert undefined to object 

不用說,我非常惱火和困惑。什麼是未定義的?我錯過了什麼?我在ij的值爲alert(),並且它們在i=0j=1的情況下都沒問題,但是當它碰到上面提到的行時,就會報錯。

在此先感謝。

回答

4

問題是你從來沒有定義pos[j]。因此,pos[j][i]就像undefined[i]。試試這個:

for(j = 0; j < 5; j++) { 
    var nextPosition = 0; 
    pos[j] = [];       <== new statement 
    for(var i=0; i < numZones; i++) { 
     alert(j + '' + i); 
     pos[j][i] = nextPosition; 
     nextPosition = (nextPosition + screenWidth + bufferSize)/scales[j]; 
    } 
} 

順便說一句,我推薦使用數組文本初始化pos

var pos = []; 

而不是new Array()。它被認爲更時尚。 :)

+0

我永遠不會想到這一點。非常感謝你!我知道這只是一臺電腦,但我希望Javascript調試器能夠提供哪些部分是「未定義的」。 – 2013-03-10 07:06:52