0

我有一个 Javascript 对象,如下所示:

var a = {
  b: [1,2,3,4,5,6,7,8,9],
  c: [10,11,12,13,14,15]
}

循环遍历两个数组(我想遍历每个值!)我使用$.each,但我可以这样做:

// Option A:
$.each(a, function(i, d){
  $.each(d, function(j, e){
    console.log(e);
  }
});

或这个

// Option B:
$.each(a.b, function(k, f){
  console.log(f)
})

$.each(a.c, function(l, g){
  console.log(g)
})

两者都生成完全相同的输出,但是这两个版本中哪个更快/更高效/更好?

有什么区别吗?

还是有更快/更有效/更好的方法(没有$.each)?

4

4 回答 4

8

最有效的方法是使用简单的原生for循环。完全避免使用 jQuery。

于 2013-06-25T11:27:29.797 回答
1

没有什么可以打败:

var i=0, arr=a.b, len=arr.length;   
for(; i<len; i++ ) { console.log(arr[i]) } ;

顺便说一句,如果您有疑问,请询问 jsperf。
这里有一个测试显示 5X / 10X 增加:http:
//jsperf.com/for-vs-foreach/9

于 2013-06-25T11:34:23.310 回答
1

使用某种方式each总是比 for 循环慢是不正确的。SM 和 V8 可以很好地进行内联,只要您不破坏它们 - 每个利用这一事实的自定义实现都可以像 for 循环一样快地运行。

话虽如此,jQuery$.each并没有利用这一事实,而且速度很慢。避免在性能敏感的情况下。

As for your question, I expect the second one to be slightly faster in JITs because it avoids reflection and uses static property access which is taken advantage of by every modern engine. $.each is so slow that the difference isn't really pronounced here.

http://jsperf.com/129031290419034

于 2013-06-25T13:45:39.200 回答
0

如果您真正关心的是速度,那么请使用 javascript 自己的 for 循环。对于您的回答,我认为选项 b 会更快

于 2013-06-25T11:34:04.730 回答