for循环中的变量未定义?

Cai*_*ins 0 javascript variables scope for-loop undefined

运行Update()时,我收到一条错误,指出map [x]未定义为"map [x] [y] = rawmap [rawmapcount];" 而且我不确定为什么?

var currentuser;
var map = new Array(63);
for(x = 0;x < 36;x++) {
    map[x] = new Array(35);
}

function Update(login) {
    $.post("server.php",{update:1,login:login},function(data) {
        if(data == 0) {window.location.href = "WEBSITE";}
        else {
            var rawdata = data.split("[BRK]");
            currentuser = rawdata[0];
            var rawmap = rawdata[1].split("|");
            var rawmapcount = -1;
            var x;
            var y;
            for(x = 0;x < 64;x++) {
                for(y = 0;y < 36;y++) {
                    rawmapcount++;
                    map[x][y] = rawmap[rawmapcount];
                }
            }
        }
    });
}

Update(1);
//setInterval(function() {Update(0);},500);
Run Code Online (Sandbox Code Playgroud)

Ted*_*opp 5

您正在初始化前36个位置map,但您尝试访问64个位置,就好像它们都已初始化一样.

for(x = 0;x < 36;x++) { // <= Note the range!
    map[x] = new Array(35);
}
    . . .
        for(x = 0;x < 64;x++) { // <= Note the range!
            for(y = 0;y < 36;y++) {
                rawmapcount++;
                map[x][y] = rawmap[rawmapcount];
            }
        }
Run Code Online (Sandbox Code Playgroud)

此外,您的y范围是36,而不是35.但是,这不会导致错误,因为JavaScript会自动扩展数组的范围.实际上,您可以初始化每个元素map:

map[x] = [];
Run Code Online (Sandbox Code Playgroud)