javascript - 如何跳到jQuery.each()util中的下一个迭代?


我试图迭代通过一个元素的数组。 jQuery的文档说:

jquery.Each()文档

返回非false与for循环中的continue语句相同,它将立即跳到下一个迭代。

我试过调用'return non-false'; 和“非假” (sans return)都不会跳到下一个迭代。 相反,他们打破了循环。 我错过了什么?



Answers


他们的非假是什么意思是:

return true;

所以这个代码:

var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
    if(arr[i] == 'three') {
        return true;
    }
    alert(arr[i]);
});

将提醒一,二,四,五




通过“返回非错误”,它们意味着返回任何不适用于布尔错误的值。 所以你可以回答true1'non-false' ,或者其他你能想到的东西。




Javascript有一种“真实”和“虚假”的概念。 如果一个变量有一个值,那么一般情况下你会看到),它具有“真实性” - 无效,或者没有任何价值倾向于“虚假”。 下面的代码片段可能会有所帮助:

var temp1; 
if ( temp1 )...  // false

var temp2 = true;
if ( temp2 )...  // true

var temp3 = "";
if ( temp3 ).... // false

var temp4 = "hello world";
if ( temp4 )...  // true

希望有帮助?

此外,它值得从道格拉斯克罗克福德看这些视频

Javascript语言

Javascript - 好的部分




不要忘了,有时你可能会从块的末尾掉下去,进入下一个迭代:

$(".row").each( function() {
    if ( ! leaveTheLoop ) {
        ... do stuff here ...
    }
});

而不是像这样实际返回:

$(".row").each( function() {
    if ( leaveTheLoop ) 
        return; //go to next iteration in .each()
    ... do stuff here ...
});



jQuery.noop()可以帮助

$(".row").each( function() {
    if (skipIteration) {
        $.noop()
    }
    else{doSomething}
});



循环只会返回字面上的false 。 例如:

// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
   break;
}

这意味着你可以返回任何东西,包括undefined东西,如果你不返回任何东西,那么你可以简单地使用一个空的return语句:

$.each(collection, function (index, item) {
   if (!someTestCondition)
      return; // go to next iteration

   // otherwise do something
});

这可能会因版本而异。 这适用于jQuery 1.12.4。 但实际上,当你退出函数底部时,你也没有返回任何东西,这就是循环继续的原因,所以我期望没有任何返回的东西不可能继续循环。 除非他们想强迫每个人开始返回一些东西来保持循环,否则没有任何东西可以成为继续前进的一种方式。