JavaScript 2d数组导致“无法读取属性'未定义'未定义”

时间:2016-04-23 22:50:06

标签: javascript arrays multidimensional-array undefined

我试图在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永远不会超出已定义数组的范围,所以我不确定为什么会发生这种情况。

谢谢!

1 个答案:

答案 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};
    })
});