我最近遇到了一个我以前没见过的jQuery构造。这是一个简化版本:
$([ '1', '2', '3' ]).each( function( index, value ) {
console.log( "index", index, "value", value );
});
迭代数组[ '1', '2', '3' ]
的所有元素。问题是,我常常看到$(...)
与CSS选择器一起使用,但我还没有看到它在新声明的数组中使用,就像在这里所做的那样。但它似乎可行(使用Firefox 34和Chromium 39进行测试)。
Q1:我是否理解这相当于
var a = [ '1', '2', '3' ];
for ( var i = 0, value; value = a[i]; i++ ) {
console.log( "index", i, "value", value );
}
如果没有,有什么区别? (除了这声明变量a
,i
和value
)之外。
Q2:就jQuery中的数组进行迭代而言,我更习惯$.each
(不要与上面使用的$(selector).each
混淆)。以上是否等同于
$.each( [ '1', '2', '3' ], function( index, value ){
console.log( "index", index, "value", value );
});
如果是,为什么jQuery中有两个非常相似的结构?在两者之间,迭代数组的首选方法是什么,或者这仅仅是个人风格的问题?
答案 0 :(得分:4)
Q1。是的。
Q2。 jQuery接受数组(和类似数组的对象)并将它们转换为jQuery对象。
您可以在浏览器控制台上轻松查看:
console.dir($([ '1', '2', '3' ]))
> VM199:2 e.fn.e.init[3]
这是一个调用返回的jQuery对象。它们可以使用.each()
进行迭代。这个工具旨在让你这样做(人为的例子):
$(document.getElementsByTagName("A")).each(func);
使用简单的字符串数组这样做可能会继续有效,但我仍然认为这是对API的误用,并建议采用正确的方法:
$.each(['1', '2', '3' ], func);
答案 1 :(得分:3)
Q1 :正如其他人所说,是的。
Q2 :首先说不是因为你可以。
您可以使用$([ '1', '2', '3' ]).each()
这是正确的,但它效果不佳。
两者都不一样(尽管它们相似)。如jQuery doc中所述:
$.each()
函数与$(selector).each()
不同,$.each()
用于独占于jQuery对象进行迭代。$([ '1', '2', '3' ]).each()
函数可用于迭代任何集合,无论它是对象还是数组。
这意味着如果使用each
,则创建一个不需要的jQuery对象。它更快,性能更明智,jQuery对象的属性.each()
然后调用传递数组的函数,而不是调用创建数组的jQuery对象的函数,然后访问其原型{{1}}。 / p>