Javascript for循环错误

时间:2011-08-16 07:48:41

标签: javascript jquery

这就是我所拥有的:

function get_bad_changelist_authors() {
   var changelistAuthorDivs = $('div.bad_changelist_author');
   var changelistAuthors = [];

   for (var div in changelistAuthorDivs) {
      changelistAuthors.push($(changelistAuthorDivs[div]).text());
   }

   return changelistAuthors;
}

changeListAuthorDivs有n个元素,但由于某种原因,它迭代n + 1次并在最后一次迭代时将div初始化为字符串(即字符串“length”)。在最后一次迭代中,这个循环有错误。

3 个答案:

答案 0 :(得分:2)

您似乎正在使用jQuery (请确认)。然后,您可以使用.map() [docs]以更简洁的方式实现相同的目标:

function get_bad_changelist_authors() {
   return $('div.bad_changelist_author').map(function() {
        return $(this).text();
   }).get();
}

或者,如果处理jQuery对象,请使用.each() [docs]

一般来说,@ James完全正确,不要使用for...in迭代数组(see the warning here)。在这种情况下,jQuery对象必须像数组一样对待。

答案 1 :(得分:1)

JavaScript for...in循环也将迭代对象的属性(length是对象的属性,这就是为什么你最终得到一个包含该字符串的div,不是你想要的。请改用普通for循环:

for(var i = 0; i < changeListAuthorDivs.length; i++) {
   //Do stuff
}

答案 2 :(得分:0)

试试这个

 for (var div in changelistAuthorDivs) {
     if(Object.prototype.hasOwnProperty.call(changelistAuthorDivs[div], div))
     changelistAuthors.push($(changelistAuthorDivs[div]).text());
  }