javascript数组长度未显示在我的控制台日志中

时间:2013-02-13 14:49:40

标签: javascript arrays for-loop

我正在开发一个HTML5画布游戏,我有一系列正在绘制到画布上的图像。数组中的图像当前都正确绘制,我有一个console.log行,我想用它来显示控制台中数组的大小。但由于某种原因,控制台一直告诉我数组长度未定义。

我用来打印数组长度的行是:

console.log("sources array length = " + sources.length);

它在for循环中:

        for (index=0;index < numImages ;index++){
        console.log(index);
        images[index] = new Image();
        images[index].src = sources[index];
        console.log("Adding " + sources[index]);
        callback(images[index]);
        console.log("sources array length = " + sources.length);
    }

如您所见,我在循环中有另一个console.log语句,每次循环运行时都会记录...

console.log(index); 

此行在每次循环运行时打印变量索引的值,从0开始,每次增加1,直到循环结束时达到等于变量'numImages'的值。

但是,由于某种原因,应该打印数组长度的行每次循环运行时都显示“sources array length = undefined”,而不是数组的实际长度。

有人能指出我为什么会这样吗?如何在每次运行循环时显示源数组的长度?

编辑13/02/2013 @ 15:10

sources数组在同一个文件中定义,使用以下行:

var sources = {};

我没有为数组定义设置长度的原因是因为我需要动态的长度。然后我使用这样的行向数组添加元素:

sources[0] = document.getElementById("building").src,
sources[1] = document.getElementById("chair").src,
sources[2] = document.getElementById("drink").src,
sources[3] = document.getElementById("food").src,

所以我想要我的console.log行来做,就是告诉我当前数组的长度,即添加了多少元素。正如您在我原始帖子中的第一段代码中所看到的,我有一个console.log,每次将一个元素添加到sources数组时,它会向控制台输出一条消息 - 它们显然正确添加,否则,它们不会显示在画布上......因此数组必须具有在图像绘制到画布的点处定义的长度,否则它们将不在要绘制的数组中。

1 个答案:

答案 0 :(得分:3)

  

但是,由于某种原因,应该打印数组长度的行每次循环运行时都显示“sources array length = undefined”,而不是数组的实际长度。

...告诉我们sources没有length属性,因此不是数组。完全有可能构建一些不是数组但仍具有名称为01等属性的内容。例如:

var sources = {0: "zero", 1: "one", 2: "two"};
console.log(sources[0]); // "zero"
console.log(sources.length); // "undefined"

如果你通过输出一些服务器端信息得到sources,它可能正在上面的表格中输出(一个带有数字属性名称的普通对象,可能是引号)而不是一个实际的数组,看起来像这样:

var sources = ["zero", "one", "two"];

重新编辑

  

sources数组在同一个文件中定义,使用以下行:

var sources = {};
     

我没有为数组定义设置长度的原因是因为我需要动态的长度。然后我使用这样的行向数组添加元素:

sources[0] = document.getElementById("building").src,
sources[1] = document.getElementById("chair").src,
sources[2] = document.getElementById("drink").src,
sources[3] = document.getElementById("food").src,

这不是问题,JavaScript数组是动态的(事实上,它们是not really arrays at all - 或者至少,标准类型不是,有更新的类型实际上是数组)。所以只需改变

var sources = {};

var sources = [];

使它实际上是一个数组。然后你可以按照你已经做过的方式添加到数组中(这绝对没问题)你可以使用sources.push(document.getElementById("chair").src);等等。