考慮這個例子的Javascript代碼:Javascript數組宣言:新的Array(),新陣列(3),[ 'A', 'B', 'C']創建不同行爲的陣列
a = new Array();
a['a1']='foo';
a['a2']='bar';
b = new Array(2);
b['b1']='foo';
b['b2']='bar';
c=['c1','c2','c3'];
console.log(a);
console.log(b);
console.log(c);
結果在Firebug控制檯如下:
對於(在 '[]' 不得不通過點擊 '+' 按鈕被擴展):
[]
a1 "foo"
a2 "bar"
對於b:
[undefined, undefined]
對於C:
["c1", "c2", "c3"]
我的問題是:
- 現在用的陣列I [ '鍵'] = '值' 語法正確?
- 爲什麼數組b不按預期工作?
- 爲什麼控制檯中的數組a和c顯示不同?似乎jQuery無法通過.each()方法遍歷數組a。
- 你可以推薦任何有關Javascript數組行爲的優秀教程嗎?
注:谷歌Chrome瀏覽器的Firebug的僅顯示陣列[] '一',而選擇將其展開。
編輯:好吧,似乎Javascript中的數組只有數字鍵,所以添加一個字符串作爲鍵名稱使對象不在數組中。但爲什麼不jQuery的。每個工作呢?
$.each(a, function()
{
alert ('derp');
})
該腳本追加到腳本中,不產生警報。
您將JavaScript的數組對象與像PHP這樣的語言提供的關聯數組混淆了。 JavaScript數組僅使用數字索引。使用語法'a ['a1'] = val'將屬性'a1'添加到對象'a',而不是數組值。 –
@ P.Brian.Mackey:可能是因爲這類問題在SO上被問過很多次。 – RightSaidFred
@exizt:Firebug和類似的工具對你想要顯示的內容做出假設。它們不一定是語言的完美表示,儘管如下回答,它通常最好只依賴JavaScript數組中的數字屬性。 – RightSaidFred