'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
.
Solution 1:[1]
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
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |