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"]
我的问题是:
- 我正确使用数组['key'] ='value'语法吗?
- 为什么数组b不按预期工作?
- 为什么控制台中的数组a和c显示不同? 也似乎jQuery是无法遍历数组a和它的.each()方法。
- 你可以推荐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/a2
和b1/b2
是数组内的关联对象,所以只能通过console.log(a.a1, a.a2)
types的语法