java脚本数组赋值错误

Hoi*_*jof 3 javascript arrays

var UserBoard = new Array(20,20);
for(var i = 0; i < 21; ++i){
    for(var j = 0; j < 21; ++j){
        UserBoard[i,j] = 0;
    }
}
document.write(UserBoard[3,5]);
UserBoard[4,5]=1;
document.write(UserBoard[3,5]);
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/XbyqN/2/

这很简单,但我不知道为什么会这样.由于我已将2d数组初始化为0,因此警报应为0,而不是1.

有人能解释一下为什么吗?

Dom*_*let 7

让我们分解吧

var UserBoard = new Array(20,20);
Run Code Online (Sandbox Code Playgroud)

您正在创建一个包含两个插槽的数组,这两个插槽都包含值"20"(int).所以你的阵列是[20, 20]

接下来,你的循环:

for(var i = 0; i < 21; ++i){
  for(var j = 0; j < 21; ++j){
    UserBoard[i,j] = 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

二维数组不是这样定义的.在这种情况下,只有"j"计数器才能执行某些操作."i"被忽略了.所以你最终得到一个数组如下:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

接下来,分配:

UserBoard[4,5]=1;
Run Code Online (Sandbox Code Playgroud)

相当于:

UserBoard[5]=1;
Run Code Online (Sandbox Code Playgroud)

而你的提醒:

alert("test: " + UserBoard[3,5]);
Run Code Online (Sandbox Code Playgroud)

相当于:

alert("test: " + UserBoard[5]);
Run Code Online (Sandbox Code Playgroud)

这就是为什么你得到"1"作为警报.

如果需要二维数组,则应使用以下表示法:

UserBoard[4][5] = 1;
Run Code Online (Sandbox Code Playgroud)

在MDN上阅读所有内容:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array