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]);
这很简单,但我不知道为什么会这样。警报应为0,而不是1,因为我已将2d数组初始化为0。
有人能解释我为什么吗?
答案 0 :(得分:7)
让我们分解
var UserBoard = new Array(20,20);
您正在创建一个包含两个插槽的数组,这两个插槽都包含值“20”(int)。所以你的数组是[20, 20]
接下来,你的循环:
for(var i = 0; i < 21; ++i){
for(var j = 0; j < 21; ++j){
UserBoard[i,j] = 0;
}
}
二维数组不是这样定义的。在这种情况下,只有“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;
相当于:
UserBoard[5]=1;
警报:
alert("test: " + UserBoard[3,5]);
相当于:
alert("test: " + UserBoard[5]);
这就是为什么你警告“1”。
如果您需要二维数组,则应使用以下表示法:
UserBoard[4][5] = 1;
在MDN上阅读所有内容:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array
答案 1 :(得分:1)
您希望UserBoard[i][j]
代替UserBoard[i,j]
。
多维数组不起作用,因为您似乎认为它们有效。事实上,它们是数组阵列。
使用此:
var UserBoard = new Array(20);
for(var i = 0; i < 20; ++i){
UserBoard[i] = new Array(20);
for(var j = 0; j < 20; ++j){
UserBoard[i][j] = 0;
}
}
我建议您开始使用console.log
和Chrome的开发者工具来调试您的代码(或Firebug)。在代码末尾尝试此操作,然后键入F12键:
console.log(UserBoard);
答案 2 :(得分:1)
逗号运算符计算它的两个操作数(从左到右)并返回第二个操作数的值。
var UserBoard = new Array(20,20); // [20, 20]
for(var i = 0; i < 21; ++i){
for(var j = 0; j < 21; ++j){
UserBoard[i,j] = 0; // UserBoard[j] = 0
}
}
UserBoard[4,5]=1; // UserBoard[5] = 1
alert("test: " + UserBoard[3,5]); // UserBoard[5]
你想要的是:
var UserBoard = [];
for (var i = 0; i < 20; i++) { // i < 20
UserBoard[i] = [];
for (var j = 0; j < 20; j++) {
UserBoard[i][j] = 0;
}
}
UserBoard[4][5]=1;
alert("test: " + UserBoard[3][5]);
答案 3 :(得分:0)
使用数组构造函数(new Array
)创建新数组时,参数具有不同的含义,具体取决于参数的类型和总数。
var array20long = new Array(20);// = [undefined,undefined,undefined,....].length === 20
var arrayString = new Array('foo');// = ['foo']
var yourArray = new Array(20,20);// = [20,20]
简单地说:将1个整数传递给数组构造函数,创建一个长度等于传递的int的数组,传递几个整数将产生1,1维数组,其长度等于参数的总数。在您的情况下,两个整数创建一个具有2个值的数组。每个索引都将初始化为其对应的参数。在你的情况下:索引0 === 20,索引1 === 20,如果你写了new Array(20,10)
,结果将是一个像[20,10]
这样的数组。
你得到了基本的想法。
重要的是要注意使用逗号访问多维数组是行不通的:你应该写arr[1,2]
而不是写arr[1][2]
。谷歌一些JavaScript的入门教程,它不会受到伤害......你很快就会明白为什么使用数组构造函数不是创建数组的最佳方法