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)
这很简单,但我不知道为什么会这样.由于我已将2d数组初始化为0,因此警报应为0,而不是1.
有人能解释一下为什么吗?
让我们分解吧
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
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |