2013-02-13 34 views
0

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

我使用打印数组长度的线路是:

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); 

这行显示变量索引值每次lo op运行,从0开始,每次增加1,直到循环达到等于变量'numImages'的值时结束。

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

任何人都可以指出为什么这是?每次循环运行时,如何显示sources数组的长度?

编辑13/02/2013 @ 15:10

来源阵列在相同的文件中定义,使用线:

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数组时,它都会向控制台输出一条消息 - 它们显然是正确添加的,否则,它们不会显示在画布上...所以数组的长度必须在图像被绘制到画布上时定义,否则它们不会被绘制在数组中。

+3

你如何以及在哪里定义你的'sources'变量? – VisioN 2013-02-13 14:50:50

+0

定义了“sources”的位置? – 2013-02-13 14:50:54

+0

我已经添加了代码来显示'sources'的定义以及它的使用方式。 – someone2088 2013-02-13 15:16:12

回答

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"]; 

重新您的编辑

的源极阵列在相同的文件中定义,使用线:

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   —或者至少,标准样AREN”吨,有更新的类型,实际上是阵列)。因此,只要改变

var sources = {}; 

var sources = []; 

,使其实际上是一个数组。然后,你可以添加到你已经在做它的方式(这是绝对好的)你可以使用sources.push(document.getElementById("chair").src);等。

+0

我想这是一个简单的对象'{}',它的'length'为'undefined'。 – VisioN 2013-02-13 14:53:38

+0

@VisioN:我也是。 – 2013-02-13 14:53:48

+0

我使用'var sources = {};'行创建了它,据我所知,它是如何创建一个空数组的? – someone2088 2013-02-13 15:17:23

相关问题