2013-11-03 44 views
0

這裏是我當前的代碼以計算讀取未定義的屬性663。如果我將tempX更改爲x,kseedSeparation/2它可以工作。JS數組不能作爲索引

代碼摘錄:

var mapX = 1000, 
mapY = mapX, 
seedLess = 3, 
seedSeparation = 32, //Even number 
canSeed, tempX, tempY, 
x, y, seedNum = Math.round(((mapX + mapY)/2)/seedLess); 

var map = []; 

for (i = 0; i <= mapX; i++){ 
    map[i] = []; 
    for (k = 0; k <= mapY; k++){ 
     map[i][k] = 0; 
    } 
} 
x = Math.floor((Math.random()*mapX)+1); 
y = Math.floor((Math.random()*mapY)+1); 
for (l = 0; l <= seedSeparation; l++){ 
    for (k = 0; k <= seedSeparation; k++){ 
     tempX = x + k - seedSeparation/2; //Here lies the problem 
     tempY = y + l - seedSeparation/2; 
     if(tempX >= 0 || tempY >= 0){ 
      if(map[tempX][tempY]){ 
       canSeed = false; 
      } 
     } 
    } 
} 

這裏有什麼問題嗎?爲什麼這個計算給我一個錯誤?

回答

1

望着小提琴,這個問題是不是您所標記的代碼行,而是幾行進一步下跌:

if(map[tempX][tempY]){ 

這意味着在map的價值沒有條目在tempX,因此map[tempX]給你的值undefined。然後,您嘗試執行(實際上)undefined[tempY],該操作失敗,因爲您無法從undefined讀取屬性值。

你可以把它改寫,以防止這種可能性:

if(map[tempX] && map[tempX][tempY]){