开发者问题收集

JavaScript 中的类型错误:无法读取未定义的属性

2015-04-17
494

我有一个像这样的 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;
}

错误显示:

Can not read property '5' of undefined.

我已经使用 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个回答

此行:

window.onload = new newCard;

是:

  1. newCard 作为构造函数调用(但实际上不是)
  2. 将从中创建的对象分配给 onload

由于您在此处调用 newCard ,因此它会在您到达下一行之前运行:

var usedNums= new Array(76);

因此,当您尝试读取 usedNums 时,它是未定义的。

您需要将 newCard 函数 指定为您的加载处理程序。因此,不要调用它:

window.onload = newCard;
Quentin
2015-04-17