开发者问题收集

未捕获的类型错误:无法读取未定义的属性“长度”

2019-12-12
511

在使用 JavaScript 运行以下代码时,我在输出控制台中遇到了 Uncaught TypeError : Cannot read property 'length' of undefined

var field = [];

function setup()
{
    createCanvas(625, 625);
    field = generateField();    
}

function draw()
{
    background(51);

    for(var i=0; i<field.length; i++)
    {
        field[i].draw();
    }
}

function generateField()
{
    var f = [];
    for (var i = 0; i < 625; i++)
    {
        f.push(new Tile(i%25, Math.floor(i/25), "BARRIER"));
    }
}

错误出现在以下行:for(var i=0; i < field.length; i++)

任何关于如何调试此问题的建议都将不胜感激。

2个回答

您很可能只是在这个函数中缺少一个返回语句:

function generateField()
{
    var f = [];
    for (var i = 0; i < 625; i++)
    {
        f.push(new Tile(i%25, Math.floor(i/25), "BARRIER"));
    }
    return f;      // <-- this line
}
Ivan86
2019-12-12

您在 generateField 函数中缺少 return 语句,正如 Functions - JavaScript|MDN 中所述:

A function without a return statement will return a default value. In the case of a constructor called with the new keyword, the default value is the value of its this parameter. For all other functions, the default return value is undefined .

在这种情况下, generateField 被用作常规函数,它将返回 undefined 。因此,在尝试访问 field 变量上的 length 属性时会引发 Uncaught TypeError

cperezcapote
2019-12-12