无法阅读财产' 1'未定义的错误

时间:2014-10-29 11:59:40

标签: javascript html5

我检查了一些与我非常相似的问题,并尝试了我所知道的一切。这个错误让我发疯。

我正在做一个游戏"它由数字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的新手。

1 个答案:

答案 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。