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

Jos*_*osh 428 javascript iteration jquery

我正在尝试迭代一系列元素.jQuery的文档说:

jquery.Each()文档

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

我试过称'返回非假;' 并且'非虚假;' (没有返回)两者都没有跳到下一次迭代.相反,他们打破了循环.我错过了什么?

Pao*_*ino 776

他们所说的非虚假是:

return true;
Run Code Online (Sandbox Code Playgroud)

所以这段代码:

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

会警告一,二,四,五

  • 要仅退出当前迭代,只需返回'return'即可.并且退出所有迭代前进返回false. (15认同)
  • 值得一提的是,这可行,因为在执行此代码时您处于函数内. (7认同)

tj1*_*111 61

通过'return non-false',它们意味着返回任何不能用于布尔值false的值.所以,你可以返回true,1,'non-false',或任何其他你能想到的.

  • 为什么不只是为了表示"返回'继续';" (20认同)

mle*_*nox 5

Javascript有点'真实'和'虚假'的想法.如果一个变量有一个值,那么通常你会看到它有'真实性' - 无效,或者没有值倾向于'虚假'.下面的片段可能会有所帮助:

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

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

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

var temp4 = "hello world";
if ( temp4 )...  // true
Run Code Online (Sandbox Code Playgroud)

希望这有帮助吗?

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

更新:感谢@cphpython发现损坏的链接 - 我现在更新为指向工作版本

Javascript语言

Javascript - 好的部分


Dav*_*eau 5

当您按字面返回时,循环才会中断false。前任:

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

这意味着您可以返回任何其他内容,包括undefined,如果您不返回任何内容,则返回的是 ,因此您可以简单地使用空的 return 语句:

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

   // otherwise do something
});
Run Code Online (Sandbox Code Playgroud)

这可能会因版本而异;这适用于 jquery 1.12.4。但实际上,当您退出函数的底部时,您也不会返回任何内容,这就是循环继续的原因,所以我希望不存在任何返回任何内容都无法继续循环的可能性。除非他们想强迫每个人都开始返回一些东西来保持循环继续,否则不返回任何东西必须是保持循环继续下去的一种方法。