Javascript数组声明:new Array(),new Array(3),创build行为不同的数组

考虑这个例子的Javascript代码:

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控制台中的结果如下:

对于([']'必须通过点击'+'button来扩展):

 [] a1 "foo" a2 "bar" 

对于b:

 [undefined, undefined] 

对于c:

 ["c1", "c2", "c3"] 

我的问题是:

  1. 我正确使用数组['key'] ='value'语法吗?
  2. 为什么数组b不按预期工作?
  3. 为什么控制台中的数组a和c显示不同? 也似乎jQuery是无法遍历数组a和它的.each()方法。
  4. 你可以推荐Javascript数组行为的任何好的教程?

注意: Google Chrome的Firebug仅显示数组“a”的[],而没有选项来展开它。

编辑:好吧,似乎在Javascript中的数组只有数字键,所以添加一个string作为键名称使一个对象数组。 但为什么不jQuery的。每个工作呢?

 $.each(a, function () { alert ('derp'); }) 

该代码附加到脚本中,不会产生警报。

数组有数字索引。 所以,

 a = new Array(); a['a1']='foo'; a['a2']='bar'; and b = new Array(2); b['b1']='foo'; b['b2']='bar'; 

不是向数组添加元素,而是向a对象添加.a1.a2属性(数组也是对象)。 作为进一步的证据,如果你这样做了:

 a = new Array(); a['a1']='foo'; a['a2']='bar'; console.log(a.length); // outputs zero because there are no items in the array 

你的第三个select:

 c=['c1','c2','c3']; 

用三个元素分配variablesc一个数组。 这三个元素可以被访问为: c[0]c[1]c[2] 。 换句话说, c[0] === 'c1'c.length === 3

Javascript没有使用其数组function来处理其他语言所称的关联数组,您可以在数组中使用任何types的键。 您可以通过在JavaScript中使用一个对象来实现关联数组的大部分function,其中每个项目只是一个像这样的属性。

 a = {}; a['a1']='foo'; a['a2']='bar'; 

为此目的使用数组通常是一个错误,因为它只是混淆了人们阅读你的代码,导致错误地假设代码如何工作。

JS中的数组有两种types的属性:

规则元素和关联属性(只是对象)

当你定义a = new Array() ,你正在定义一个空数组。 请注意,还没有关联对象

当你定义b = new Array(2) ,你正在定义一个有两个未定义位置的数组。

在“a”和“b”的例子中,你都要添加关联属性,即对象到这些数组。

console.log (a)console.log(b)打印数组元素[][undefined, undefined] 。 但是由于a1/a2b1/b2是数组内的关联对象,所以只能通过console.log(a.a1, a.a2)types的语法