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。 但是實際上,當你退出函數底部時,你也沒有返回任何東西,這就是循環繼續的原因,所以我期望沒有任何返回的東西不可能繼續循環。 除非他們想強迫每個人開始返回一些東西來保持循環,否則沒有任何東西可以成為繼續前進的一種方式。