【发布时间】:2011-11-23 17:19:49
【问题描述】:
考虑这个示例 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 控制台中的结果如下:
对于a(必须通过单击“+”按钮来扩展“[]”):
[]
a1 "foo"
a2 "bar"
对于 b:
[undefined, undefined]
对于 c:
["c1", "c2", "c3"]
我的问题是:
- 我是否正确使用了 array['key']='value' 语法?
- 为什么数组 b 没有按预期工作?
- 为什么数组 a 和 c 在控制台中显示不同?似乎 jQuery 也无法使用它的 .each() 方法遍历数组 a。
- 能否推荐一些关于 Javascript 数组行为的好教程?
注意:Google Chrome 的 Firebug 仅显示数组“a”的 [],没有扩展它的选项。
编辑:好吧,似乎 Javascript 中的数组只有数字键,所以添加一个字符串作为键名会使一个对象脱离数组。但是为什么 jQuery 的 .each 不能使用它呢?
$.each(a, function ()
{
alert ('derp');
})
此代码附加到脚本中,不会产生任何警报。
【问题讨论】:
-
您将 JavaScript 的数组对象与 PHP 等语言中可用的关联数组混淆了。 JavaScript 数组仅使用数字索引。使用语法
a['a1'] = val将属性a1添加到对象a,而不是数组值。 -
@P.Brian.Mackey:可能是因为这类问题在 SO 上已经被问过很多次了。
-
@exizt:Firebug 和类似工具对您想要显示的内容做出假设。它们不一定是语言的完美表示,尽管如下所述,通常最好只依赖 JavaScript 数组中的数字属性。
-
@RightSaidFred - 你是说这个问题是重复的,但答案是新的?
-
在这种情况下,究竟什么才是“研究”?你能告诉我我应该使用哪些搜索查询来找到正确的答案吗?
标签: javascript arrays syntax