我正在开发一个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数组时,它会向控制台输出一条消息 - 它们显然正确添加,否则,它们不会显示在画布上......因此数组必须具有在图像绘制到画布的点处定义的长度,否则它们将不在要绘制的数组中。
答案 0 :(得分:3)
但是,由于某种原因,应该打印数组长度的行每次循环运行时都显示“sources array length = undefined”,而不是数组的实际长度。
...告诉我们sources
没有length
属性,因此不是数组。完全有可能构建一些不是数组但仍具有名称为0
,1
等属性的内容。例如:
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);
等等。