我在 javascript 中为井字棋写了一些代码,开头是:
var board = [
[0,0,0],
[0,0,0],
[0,0,0]
];
(这是在函数之外声明的)
稍后在函数中生成计算机移动时,它会在循环中运行以下代码行:
if (board[xx][yy] == 0) {
但它给了我错误TypeError: Cannot read property '0' of undefined
(xx 等于 0)。
如果我console.log(board)
在同一个函数中添加 a并在给我错误的行之前循环,它会给我同样的错误,但将 board 的值记录到控制台(在错误之后)。
如果我可以记录变量,为什么我不能在该行中引用它?
这是一些代码:(我没有包含它所指的 HTML)
var board = [
[0,0,0],
[0,0,0],
[0,0,0]
];
const buttonGrid = [
[1,2,3],
[4,5,6],
[7,8,9]
];
function computerMove() {
//check for winning move
xx = -1;
while (xx < 3) {
xx ++;
yy = -1;
while (yy < 3) {
yy ++;
if (board[xx][yy] == 0) { //line with error
board[xx][yy] = 2;
if (checkWin() == 2) { //checkWin returns the winning player
toClick = (buttonGrid[xx][yy]).toString(); //
updateBox(toClick, xx, yy); //confirms move
return;
}
else {
board[xx][yy] = 0;
}
}
}
}
}
考虑以下代码片段,它在您的所有代码中都存在(对于yy
和xx
):
var yy = -1;
while (yy < 3) {
yy++;
console.log(yy);
}
请注意,最终迭代记录3
. 您的数组只有三个项目,因此尝试访问索引处的项目3
将返回undefined
。
更改... < 3
为... < 2
将解决此问题:
var yy = -1;
while (yy < 2) {
yy++;
console.log(yy);
}
或者更好的是,使用传统的for
循环:
for (let yy = 0; yy <= 2; yy++) {
console.log(yy);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句