简体   繁体   中英

Cannot read property '0' of undefined in jquery

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<style>
td
{
    min-height: 50px;
    min-width: 50px;
}
</style>
</head>
<body>
<table border="1" id="tab">
<tr>
    <td class="game"></td>
    <td class="game"></td>
    <td class="game"></td>
    <td class="game"></td>
</tr>
<tr>
    <td class="game"></td>
    <td class="game"></td>
    <td class="game"></td>
    <td class="game"></td>
</tr>
<tr>
    <td class="game"></td>
    <td class="game"></td>
    <td class="game"></td>
    <td class="game"></td>
</tr>
<tr>
    <td class="game"></td>
    <td class="game"></td>
    <td class="game"></td>
    <td class="game"></td>
</tr>
</table>
<script>
    var tab=[4];
    $(document).ready(function()
    {
        var i,j;
        for(i=0;i<4;i++)
        {
            tab[i]=[4];
            for(j=0;j<4;j++)
            {
                tab[i][j]=null;
            }
        }
        randomnum();
    });
    function randomnum()
    {
        var num=Math.random();
        alert("called random num");
        if(num<0.5)
            num=2;
        else
            num=4;
        alert(num);
        var row=Math.floor(Math.random()*10);
        row=row%4;
        var col=Math.floor(Math.random()*10);
        col=col%4;
        while(tab[row][col]!=null)
        {
            var row=Math.random();
            row=(row*10)%4;
            var col=math.random();
            col=(col*10)%4;
            alert("random row col"+row+" "+col);
        }
        //alert("row:"+row+"col"+col);
        tab[row][col]=num;
        $("#tab tr:eq("+row+") td:eq("+col+")").text(num);
        keycheck();
    }
    function keycheck()
    {
        $(document).on("keydown",function(event){
            if(event.which==38)
                moveup();
            else if(event.which==40)
                movedown();
            else if(event.which==39)
                moveright();
            else if(event.which==37)
                moveleft();
            });
        }
    function moveup()
    {
        var row,col,j;
        for(col=0;col<4;col++)
        {
            for(row=0;row<3;row++)
            {
                if(tab[row][col]==tab[row+1][col])
                {
                    tab[row][col]=tab[row][col]*2;
                    row++;
                    tab[row][col]=null;
                }
            }
            for(row=0;row<3;row++)
            {
                for(j=row+1;j<4;j++)
                {
                    if (typeof j === "undefined") {
                        alert("j is undefined");
                    }
                    if (typeof row === "undefined") {
                        alert("col is undefined");
                    }
                    if (typeof col === "undefined") {
                        alert("col is undefined");
                    }
                    alert(j+" "+row+" "+col);
                    if(tab[j][col]==null&&tab[j+1][col]!=null)
                    {
                        tab[j][col]=tab[j+1][col];
                        tab[j+1][col]=null;
                        j++;
                    }
                }
            }
        }
        chntable();
    }
    function chntable()
    {
        var row,col;
        for(row=0;row<4;row++)
        {
            for(col=0;col<4;col++)
            {
                $("#tab tr:eq("+row+") td:eq("+col+")").text(num);
            }
        }
        randomnum();
    }
</script>
</body>
</html>

in the above code i get the

Cannot read property '0' of undefined

at moveup() in if(tab[j+1][col]==null&&tab[j][col]!=null) . what is the error and how to solve it? from the alert messages, I could see that none are undefined. So what is triggering the problem? What is the cause of the problem, so I can avoid it in the future? What is given in duplicate is to create an array, although it did not solve my problem. The error in the jquery library is at dispatch and q.handle .

tab is an array. In this array you have objects.

Cannot read property '0' of undefined means that you are trying to read a property of an undefined object->

var foo={bar:"test"}
console.log(foo[bar]); //you get "test"

in your case:

var obj = tab[0] //obj is undefined
console.log(obj[0]); //you get "Cannot read property '0' of undefined"

if you want to check, you can easy check every object by using:

if(tab[0]){
   //tab[0] is defined
     if(tab[0][0])
     {
       //tab[0][0] is defined
     }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM