Jos*_*osh 428 javascript iteration jquery
我正在尝试迭代一系列元素.jQuery的文档说:
返回非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)
会警告一,二,四,五
tj1*_*111 61
通过'return non-false',它们意味着返回任何不能用于布尔值false的值.所以,你可以返回true,1,'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
Run Code Online (Sandbox Code Playgroud)
希望这有帮助吗?
此外,值得查看道格拉斯克罗克福德的这些视频
更新:感谢@cphpython发现损坏的链接 - 我现在更新为指向工作版本
仅当您按字面返回时,循环才会中断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。但实际上,当您退出函数的底部时,您也不会返回任何内容,这就是循环继续的原因,所以我希望不存在任何返回任何内容都无法继续循环的可能性。除非他们想强迫每个人都开始返回一些东西来保持循环继续,否则不返回任何东西就必须是保持循环继续下去的一种方法。