JS数组与jQuery对象构成的数组的差异

[code="js"]
var a = new Array();
a.push("a");
a.push("B");
a.push(1);
a.push(2);
[/code]
firebug堆栈截图:
[img]http://dl.iteye.com/upload/attachment/614603/432170df-0715-309a-8a3d-1adebc54c087.png[/img]
Array是JS内置类型。所以a是标准的JS数组。

[code="html"]


文本块1


文本块2



文本块3

[/code]

[code="js"]
var spans = $("span");
var _spans = document.getElementsByTagName("span");
[/code]
变量截图如下:

[img]http://dl.iteye.com/upload/attachment/614591/a2d370fb-1f6a-3426-bc4c-f3b6aa3c2c1c.png[/img]

spans是jQury对象,且是数组,其元素span为DOM元素。

[img]http://dl.iteye.com/upload/attachment/614595/56d43667-d44c-3dd0-9459-48a03af7450e.png[/img]

_spans是span构成的数组,而span是DOM元素。

我的问题是:
1、_spans和a同是JS数组,为什么firebug里截图属性不一致?比如a有length的属性没有列出来,而_spans则把length列出来了。
2、spans既作为数组又作为jQuery对象,这与JS的数组定义矛盾吗?
多谢!

1、_spans不是数组,是一个DOM对象集合,有length属性,可遍历,但不是数组,你可以调用instanceof Array 方法进行测试。
2、spans也不是数组,而是JQuery封装好的对象,从其各种属性就可以看出来。
不要被表面现象所迷惑。

1、_spans和a虽同是JS数组,但数组元素类型不同,firebug展示是这种效果,用GOOGLE的工具显示效果可能又不同。我觉得没必要纠结在这方面,毕竟这些工具只是辅助开发的。
2、明确了jQuery对象和DOM对象相互间的转换就清楚了:jQuery对象转DOM对象,$("span")[0]即为第一个span DOM元素,而$(DOM对象)就成了jQuery对象。即可简单理解为jQuery对象是DOM对象的集合。所以spans既作为数组又作为jQuery对象,这与JS的数组定义不矛盾。