for ... in循环和jQuery each()函数有什么区别?

时间:2012-09-14 04:07:12

标签: javascript jquery loops

我使用以下脚本来迭代对象(我不知道哪一个最好用,请告诉我哪一个是最好的):

var days = {Sunday: 0, Monday: 1, Tuesday: 2, Wednesday: 3, Thursday: 4, Friday: 5, Saturday: 6};

$.each(days, function(key, value){
    $('#days').append('<li>' + key + '(' + value + ')</li>');
});


for(var key in days){
    $('#days').append('<li>' + key + '(' + days[key] + ')</li>');
}

3 个答案:

答案 0 :(得分:4)

不管怎样,你应该缓存那个选择器:

var elem = $( '#days' );
$.each(days,function(key,value){
    elem.append('<li>'+key+'('+value+')</li>');
});
在这种情况下,

.each()会更好。模式更清晰。

使用for循环,你想要使用obj.hasOwnProperty(key),这样你就不会通过继承属性进行挖掘......这会增加另一层缩进:

var elem = $( '#days' );
for( var key in days ){
  if( days.hasOwnProperty( key ) ){
    elem.append('<li>'+key+'('+days[key]+')</li>');
  }
}

答案 1 :(得分:2)

很明显,如果没有任何性能测试,原生javascript for循环会更快,但对于10-20个小项目这样的小型数组没有太大区别。因此,请使用您想要的任何一个。

答案 2 :(得分:0)

$.each的功能:如果函数返回false,它将停止循环。它适用于对象和数组。 $(this)指的是当前正在处理的元素。

$.each的缺点:有一点开销,因为它会对参数进行初步检查,并且必须对每个元素执行函数调用。

但正如其他人所说,除非您处理大量物品,否则开销可能微不足道。

$.each()的另一个好处就是容易识别这个词 - 在一个语句的开头加上它可以明显地表明你正在循环一个集合。它也很容易搜索。