2013-02-13 36 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

相關問題