Running into Uncaught TypeError: Cannot read property of undefined

Running into Uncaught TypeError: Cannot read property of undefined

我有一个算法可以修改 BattleShip 游戏的 10x10 2D 数组,以在随机方向随机放置船只。

棋盘是这样的:

var board= [
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 0
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 2
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 3
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 4
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 5
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 6
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 7
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 8
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]  // 9
];

该算法会将 0 变为 1,并将随机船放置在随机索引和随机方向上。数组是这样的:var array = [5, 4, 3, 3, 2](数字代表长度,例如五个 1,四个 1,等等)该算法在大多数情况下都运行良好,并且会 运行 直到数组为空。

问题是,我偶尔会 运行 进入 Uncaught TypeError: Cannot read property of <some integer> undefined 仅当它试图将船超出范围时将其置于向上或向下方向。检查所选方向是否越​​界的 if 语句会发生错误,如下所示:

// check out of bounds for UP direction
if (x - 1 < 0 || array[x - i][y] == undefined) {
  break;
}
// check out of bounds for DOWN direction
if (x + 1 > 9 || array[x + i][y] == undefined) {
  break;
}

我认为错误的发生与尝试执行 array[x - i][y]array[x + i][y] 的负索引有关。我以为我已经通过使用 x - 1 < 0x + 1 > 9 添加额外的 OR 检查来解决这个问题,但我仍然 运行 进入这个异常。

根据评论,问题是 array[x + i]array[x - i] 没有边界检查。因此,对 array[x +/- i][y] 的调用会导致 cannot read property ... of undefined 错误。