2011-08-11 238 views
13

是否有另一種(更漂亮)的方式來初始化這個Javascript數組?初始化javascript數組

var counter = []; 
    counter["A"] = 0; 
    counter["B"] = 0; 
    counter["C"] = 0; 
    counter["D"] = 0; 
    counter["E"] = 0; 
    counter["F"] = 0; 
    counter["G"] = 0; 

回答

17

答:這不起作用,或者至少不是您希望的方式。當你最可能尋找的是一個散列時,你初始化了一個數組。除非將第一行更改爲counter = {};,否則counter仍將返回[]並且長度爲0。這些屬性將存在,​​但這是[]用於存儲鍵值對的混淆。

B:

var counter = {A: 0, B: 0, C: 0, D: 0, E: 0, F: 0, G: 0}; 
+0

-1,因爲上述只是一切是錯誤的。它確實「有效」,屬性被分配。通過「計數器仍然會返回0」,大概你的意思是'counter.toString()',但是這將返回一個空字符串(根據EMCA-262§15.4.4.2,因爲*計數器*沒有數字屬性)。如果* counter *被初始化爲一個對象,那麼'counter.toString()'不會返回「0」,它會根據ECMA-262§15.2.4.2返回'[object Object]'。 – RobG

+1

實際上它是dumber:在控制檯運行他的代碼給了我'0',因爲最後一行是'counter [「G」] = 0;'。無論如何,我指的是控制檯輸出。當然,你可以將幾乎任何東西當作一個屬性分配給某個對象,所以我重新編寫了這一部分,指出了將'[]'作爲關聯數組使用'{}'的可取性,如果沒有其他的理由比最少的驚喜。 – brymck

13

使用對象文本而不是數組,像這樣:

var counter = {A:0,B:0,C:0}; // and so on 

然後用點表示法訪問屬性:

counter.A; // 0 

...或方括號記號:

counter['A']; // 0 

您將主要使用數組來處理數字屬性,儘管可以像您一樣添加非數字屬性。

+1

+1對象文字..我不知道那些;很酷 –

1
var counter={A:0,B:0,C:0,D:0,E:0,F:0,G:0}; 
1

這將更有意義使用的對象是:

var counter = { 
     A: 0, 
     B: 0, 
     C: 0, 
     D: 0, 
     E: 0, 
     F: 0, 
     G: 0 
    };