我正在尝试迭代一系列元素。 jQuery的文档说:
返回非false与for循环中的continue语句相同,它将立即跳到下一次迭代。
我试过称'返回非假;'并且'非虚假;' (没有返回)两者都没有跳到下一次迭代。相反,他们打破了循环。我错过了什么?
答案 0 :(得分:761)
非虚假意味着:
return true;
所以这段代码:
var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
if(arr[i] == 'three') {
return true;
}
alert(arr[i]);
});
将提醒一,二,四,五
答案 1 :(得分:60)
通过'return non-false',它们意味着返回任何不能用于布尔值false的值。因此,您可以返回true
,1
,'non-false'
或其他任何您能想到的内容。
答案 2 :(得分: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
希望有帮助吗?
此外,值得查看Douglas Crockford的这些视频
更新:感谢@cphpython发现破损的链接 - 我已更新为现在指向工作版本
答案 3 :(得分:3)
不要忘记你有时会从块的末尾掉下来进入下一次迭代:
$(".row").each( function() {
if ( ! leaveTheLoop ) {
... do stuff here ...
}
});
而不是像这样实际返回:
$(".row").each( function() {
if ( leaveTheLoop )
return; //go to next iteration in .each()
... do stuff here ...
});
答案 4 :(得分:2)
如果您按字面意思返回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。但实际上,当你退出函数的底部时,你也没有返回任何东西,这就是循环继续的原因,所以我希望没有任何可能返回的东西 not 继续环。除非他们想强迫每个人开始返回一些东西来保持循环,否则 没有返回任何东西来保持循环。
答案 5 :(得分:-3)
jQuery.noop()可以提供帮助
$(".row").each( function() {
if (skipIteration) {
$.noop()
}
else{doSomething}
});