我试图在javascript中读取全局二维数组,它给了我“无法读取属性'未定义'的未定义”。
以下是我如何定义我的数组:
var cell = {visited:false, left:true, top:true, right:true, bottom:true}
var cells = new Array(10);
for (i = 0; i < 10; i++) //Initiate 2d cells array.
{
cells[i] = new Array(cell,cell,cell,cell,cell,cell,cell,cell,cell,cell);
}
我稍后会这样访问它:
if(x != 0) //Left
{
if(cells[x-1][y].visited == false)
{
//Do something
}
}
x和y永远不会超出已定义数组的范围,所以我不确定为什么会发生这种情况。
谢谢!
答案 0 :(得分:1)
要创建全局变量,您需要在全局范围内创建它,或者在声明时忽略var
关键字。
如我所见,您使用了var
关键字,因此只有在全局范围内创建变量时,您的变量才可以是全局变量。
只需使用cells = new Array(10);
代替var cells = new Array(10);
。
顺便说一下。如果可能的话,最好避免使用全局变量。
此外,我建议您以这种方式创建二维数组。
您通过引用传递cell
变量。所以在一个地方改变它会在任何地方改变它。
cells = new Array(10).fill().map(function(cell) {
return new Array(10).fill().map(function() {
return {visited:false, left:true, top:true, right:true, bottom:true};
})
});