2011-03-18 15 views
6

我以爲我知道如何聲明javascript數組,但在此腳本中,我得到了數組中的undefined元素的無限循環。Javascript數組僅包含初始化後未定義的值,不包含給定值

我聲明瞭三個數組數組,其中兩個有多個值,另一個有單個值。

我有一個分配三個陣列中的一個新的變量名cluster_array

switch語句當我通過cluster_array運行for循環,我得到一個無限循環和每一個元素,如果undefined

什麼我錯過了嗎?

<script type="text/javascript"> 
    var ga_west_cluster = new Array(10,11,12,14,74,75,76,77,78,79,80,81,82,83,85,86,87,88,89,90,91,92,295,296); 

// original bad array 
    var ga_east_cluster = new Array(84); 
// added an extra (dummy) value and it works fine 
    var ga_east_cluster = new Array(1,84); 
    var sc_cluster  = new Array(93,94,95,96,97,98,99,100,101,102,103); 
</script> 

這裏是alert文本:

var test_message  = "cluster data\n"; 
    for(var k=0;k<cluster_array.length;k++) 
     test_message += "value: "+cluster_array[k]+"\n"; 

test alert box

+0

你可以粘貼你的switch語句嗎? – moe 2011-03-18 20:42:54

+0

@moe事實證明,我是以錯誤的方式聲明數組,每@ Pointy的回答 – Patrick 2011-03-18 20:46:41

回答

14

不要初始化這樣的數組。始終做到這一點,而不是:

var myarray = [value, value, value, ... ]; 

的 「陣列()」 的構造是極其設計。當參數是一個數字時,單參數形式被解釋爲對具有許多「空」值的數組「初始化」的請求。這是毫無意義的事情,所以一般來說,使用數組常量符號要好得多(如上面的示例中所示)。

它在現代瀏覽器中似乎不再發生,但我發誓有時候至少有一些瀏覽器會爲單參數構造函數實際分配內存,但這並不真正有用,但卻很危險代碼可能會偶然傳入一個非常大的數字。

+0

'Array'構造函數仍然有用。例如,它可以用來創建循環,其中返回的每個值都在數組中累積。所以這個''new Array(4).fill()。map((v,i)=> i)'會返回數組''0,1,2,3'' – Molomby 2017-08-01 01:48:28

+0

@Molomby是的,這是很好的建議;這個答案已經超過6年了,這是JavaScript時代的永恆:) – Pointy 2017-08-01 03:15:46