如何解决:TypeError:grid [i] [j]未定义

时间:2019-04-08 02:51:02

标签: javascript arrays global-variables

我正在尝试构建网格并将网格的每个单元作为对象存储在名为grid的数组中。我已经将grid定义为全局变量,因此可以使用createGrid()填充它,然后使用drawGrid()读取它。

我想将网格实现为画布动画教程的一部分。我的代码是:

var grid = [];

function drawGrid() {
  for (var i = 0; i < cols; i++) {
    grid[i] = [];
    for (var j = 0; j < rows; j++) {
      if (grid[i][j].food === 0) {
        console.log("Has a good value")
      }
    }
  }
}

function Cell(i, ii) {
  this.i = i;
  this.ii = ii;
  this.food = false;
}

function createGrid() {
  for (var i = 0; i < cols; i++) {
    grid[i] = [];
    for (var j = 0; j < rows; j++) {
      grid[i][j] = new Cell(i, j);
    }
  }
}

function mainLoop() {
  clearCanvas();
  drawGrid();

  requestAnimationFrame(mainLoop)
}

createGrid();
mainLoop();

我在调用循环之前创建了网格,因此调用了drawGrid()函数后,网格已被填充。我没有将createGrid()放置在循环中,因为不必每次都创建网格,并且每次循环运行时都需要大量资源

浏览器在这里抛出错误:

if (grid[i][j].food === false) {
  console.log("Has a good value")
}

1 个答案:

答案 0 :(得分:0)

由于测试的值是布尔类型,所以写if (grid[i][j].food === false) {是没有意义的。

您必须编写以下代码:if (grid[i][j].food) {要在条件为true时实现条件
否则,如果我们想了解条件是否为假:if (!grid[i][j].food) {

仍然有必要确保i和j的值正确(i =等于cols-1的零,等等)