在javascript中键入错误:无法读取未定义的属性

时间:2015-04-17 14:49:18

标签: javascript

我有一个像这样松散的javascript函数:

var usedNums= new Array(76);
function setSquare(thisSquare)
{

    var currSquare = "square"+ thisSquare;
    var colPlace =  new Array(0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4);
    var colBasis = colPlace[thisSquare] * 15;

    var newNum;
    do{
      newNum = colBasis + getNewNum() + 1;

    }while(usedNums[newNum]); //UnCaught TypeError here

    usedNums[newNum] = true;
    document.getElementById(currSquare).innerHTML = newNum;
}

错误说:

  

无法读取未定义的属性“5”。

我已经使用console.log语句进行了检查,并且上面的所有变量都获得了预期值。

我理解什么是类型错误但不确定它在哪里破坏。

**编辑:**这是完整的脚本:

window.onload = new newCard;
var usedNums= new Array(76);

function newCard()
{
  if(document.getElementById){
      for(var i =0; i<24;i++)
      { 
          console.log("Value of I is " + i);
          setSquare(i);

      }
  }else{

   alert("Sorry, your browser does not support this script");
  }
}

function setSquare(thisSquare)
{
    console.log("thissquare" + thisSquare);
    var currSquare = "square"+ thisSquare;
    console.log("currsquare" + currSquare);
    var colPlace =  new Array(0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4);
    console.log("colplace" + colPlace);
    var colBasis = colPlace[thisSquare] * 15;
    console.log("colbasis"+ colBasis);
    var newNum;
    do{
      newNum = colBasis + getNewNum() + 1;
      console.log("new nUM" + newNum);
    }while(usedNums[newNum]);

    usedNums[newNum] = true;
    document.getElementById(currSquare).innerHTML = newNum;
}

function getNewNum()
{
var a = Math.floor(Math.random() * 15);
console.log("random number" + a);
return a;
}

1 个答案:

答案 0 :(得分:1)

这一行:

window.onload = new newCard;

是:

  1. 调用newCard作为构造函数(它不是)
  2. 将从中创建的对象分配给onload
  3. 由于您在那里调用newCard,因此它会在您到达下一行之前运行:

    var usedNums= new Array(76);
    

    因此,当您尝试从中读取时,usedNums未定义。

    您需要指定newCard 功能作为加载处理程序。所以不要调用它:

    window.onload = newCard;