2013-03-10 92 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