使用$(array).each迭代数组

Mal*_*ppa 5 arrays jquery

我最近遇到了一个我以前从未见过的jQuery构造.这是一个简化版本:

$([ '1', '2', '3' ]).each( function( index, value ) {
  console.log( "index", index, "value", value );
});
Run Code Online (Sandbox Code Playgroud)

这会迭代数组的所有元素[ '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 );
}
Run Code Online (Sandbox Code Playgroud)

如果没有,有什么区别?(除了这声明变量的事实a,ivalue).

Q2:就jQuery中的数组迭代而言,我更习惯$.each(不要与$(selector).each上面使用的混淆).以上是否相当于

$.each( [ '1', '2', '3' ], function( index, value ){
  console.log( "index", index, "value", value );
});
Run Code Online (Sandbox Code Playgroud)

如果是的话,为什么jQuery中有两个非常相似的结构?在两者之间,迭代数组的首选方法是什么,或者这仅仅是个人风格的问题?

Tom*_*lak 4

Q1. 是的。

Q2。jQuery 接受数组(和类似数组的对象)并将它们转换为 jQuery 对象。

您可以通过在浏览器控制台上发出以下命令轻松查看:

console.dir($([ '1', '2', '3' ]))
> VM199:2 e.fn.e.init[3]
Run Code Online (Sandbox Code Playgroud)

这是调用返回的 jQuery 对象。可以使用 迭代它们.each()。此工具旨在使您能够执行此操作(人为示例):

$(document.getElementsByTagName("A")).each(func);
Run Code Online (Sandbox Code Playgroud)

使用普通字符串数组执行此操作是有效的,并且将来可能会继续有效,但我仍然认为这是对 API 的误用,并会推荐正确的方法:

$.each(['1', '2', '3' ], func);
Run Code Online (Sandbox Code Playgroud)