Unable to read property "0" from 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

Cannot read property '0' of undefined

at moveup()c if(tab[j+1][col]==null&&tab[j][col]!=null). What is the mistake and how to solve it? from the warning messages, I could see that none of them are undefined. So what causes 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 and not solve my problem. error in jquery library in dispatchandq.handle

+4
source share
1 answer

tab is an array. There are objects in this array.

Cannot read property '0' of undefined means that you are trying to read an object property undefined →

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(tab[0]){
   //tab[0] is defined
     if(tab[0][0])
     {
       //tab[0][0] is defined
     }
}
0

Source: https://habr.com/ru/post/1649614/


All Articles