我检查了一些与我非常相似的问题,并尝试了我所知道的一切。这个错误让我发疯。
我正在做一个游戏"它由数字1-8和数字0的NxN表组成(这些数字表示为图像文件,数字0表示透明图像)。游戏的主旨是按顺序获取所有数字。这是一个链接,所以你可以简单了解我在说什么 - > Game
所以当我点击2号(在示例中)它应该向下并且透明图像应该上升(更改src)。
这是我的代码:
<script language="JavaScript">
const N=3;
var aTabla= CrearTabla(N);
document.write("<table>");
for (f=0;f<N;f++){
document.write("<tr>");
for (c=0;c<N;c++){
document.write("<td>");
document.write('<img src = "Numbers2/n'+aTabla[f][c]+'.gif" id="im'+f+c+'" onclick="mover('+f+','+c+');tiempo()" >');
document.write("</td>");
}
document.write("</tr>");
}
document.write("</table>");
function mover(f,c){
//Derecha
if(aTabla[f][c+1] == 0){
aAux = aTabla[f][c+1];
aTabla[f][c+1] = aTabla[f][c];
aTabla[f][c] = aAux;
aux = document.images["im"+f+(c+1)].src;
document.images["im"+f+(c+1)].src = document.images["im"+f+c].src;
document.images["im"+f+c].src = aux;
}//Izquierda
if(aTabla[f][c-1] == 0){
aAux = aTabla[f][c-1];
aTabla[f][c-1] = aTabla[f][c];
aTabla[f][c] = aAux;
aux = document.images["im"+f+(c-1)].src;
document.images["im"+f+(c-1)].src = document.images["im"+f+c].src;
document.images["im"+f+c].src = aux;
}
//Arriba
if(aTabla[f-1][c] == 0 && aTabla[f-1][c] != 'undefined'){
aAux = aTabla[f-1][c];
aTabla[f-1][c] = aTabla[f][c];
aTabla[f][c] = aAux;
aux = document.images["im"+(f-1)+c].src;
document.images["im"+(f-1)+c].src = document.images["im"+f+c].src;
document.images["im"+f+c].src = aux;
}
//Abajo
if(aTabla[f+1][c] == 0 && aTabla[f+1][c] != 'undefined'){
aAux = aTabla[f+1][c];
aTabla[f+1][c] = aTabla[f][c];
aTabla[f][c] = aAux;
aux = document.images["im"+(f+1)+c].src;
document.images["im"+(f+1)+c].src = document.images["im"+f+c].src;
document.images["im"+f+c].src = aux;
}
}
函数CrearTabla(N)是一个功能完善的功能。它返回一个2D数组。并且该参数用作NxN,因此在我的情况下它创建一个3x3表。
当我向左,向右和向上移动数字时,即使我将数字向下移动,如果他们在第2行和第3行(f == 0和f == 1在数组位置)的情况下,游戏也能正常工作。但是当我尝试移动第一行的元素(我提供的链接中的数字2)时出现错误:未捕获TypeError:无法读取属性&#39; 2&#39;未定义的
我该怎么做才能解决这个问题?我是javascript的新手。
答案 0 :(得分:1)
您需要做的是检查您是否始终访问有效位置,即行和列都在0和2之间。在您的函数中,我们可以假设(f,c)是有效位置在董事会。但是像(f-1,c)这样的东西可能并不总是有效的位置。所以,你需要检查它们:
if(c+1 <= 2 && aTabla[f][c+1] == 0){...
if(c-1 >= 0 && aTabla[f][c-1] == 0){...
if(f-1 >= 0 && aTabla[f-1][c] == 0){...
if(f+1 <= 2 && aTabla[f+1][c] == 0){...
如果第一个条件为false the second condition will not be evaluated,则阻止当前代码中的TypeError。