JS 数组无法读取未定义的属性 663,并将计算作为索引

JS Array cannot read property 663 of undefined with a calculation as an index

本文关键字:计算 索引 属性 数组 读取 未定义 JS      更新时间:2023-09-26

这是我当前的代码:JSFiddle

在第 36 行:tempX = x + k - seedSeparation / 2;给出一个错误。如果我tempX更改为xkseedSeparation / 2它有效。

代码摘录:

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;
            }
        }
    }
}

这里有什么问题?为什么这个计算会给我一个错误?

看小提琴,问题不在于你标记的那一行,而在于下面几行:

if(map[tempX][tempY]){

这意味着map中没有输入 tempX 中的值,因此map[tempX]为您提供值undefined。然后您尝试执行(实际上)undefined[tempY] ,但失败,因为您无法从 undefined 中读取属性值。

您可以重写它以防止这种可能性:

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