我有一个同时定义和未定义的变量
I have a variable that is defined and undefined at the same time
我在 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)
并在出现错误的行之前循环,它会出现相同的错误,但会将 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
处的项目将 return undefined
.
将 ... < 3
更改为 ... < 2
将解决此问题:
var yy = -1;
while (yy < 2) {
yy++;
console.log(yy);
}
或者更好的是,使用传统的 for
循环:
for (let yy = 0; yy <= 2; yy++) {
console.log(yy);
}
我在 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)
并在出现错误的行之前循环,它会出现相同的错误,但会将 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
处的项目将 return undefined
.
将 ... < 3
更改为 ... < 2
将解决此问题:
var yy = -1;
while (yy < 2) {
yy++;
console.log(yy);
}
或者更好的是,使用传统的 for
循环:
for (let yy = 0; yy <= 2; yy++) {
console.log(yy);
}