要素の配列を反復処理しようとしています。jQueryのドキュメントは言う:
false以外の値を返すことは、forループのcontinueステートメントと同じで、次の反復にすぐにスキップされます。
「return non-false;」を呼び出してみました。そして「偽ではない」; (戻り値)どちらも次の反復にスキップしません。代わりに、それらはループを壊します。何が欠けていますか?
要素の配列を反復処理しようとしています。jQueryのドキュメントは言う:
false以外の値を返すことは、forループのcontinueステートメントと同じで、次の反復にすぐにスキップされます。
「return non-false;」を呼び出してみました。そして「偽ではない」; (戻り値)どちらも次の反復にスキップしません。代わりに、それらはループを壊します。何が欠けていますか?
回答:
彼らが偽ではないことの意味は:
return true;
したがって、このコード:
var arr = ["one", "two", "three", "four", "five"];
$.each(arr, function(i) {
if (arr[i] == 'three') {
return true;
}
console.log(arr[i]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
ログに記録されますone
、two
、four
、five
。
「非偽を返す」とは、うまくいかない値をブール偽に返すことを意味します。あなたが返すことができるようにtrue
、1
、'non-false'
、または任意の他、あなたは最高だと思うことができます。
Javascriptには、「真実性」と「虚偽性」という考え方があります。変数に値がある場合、一般的には9)変数に「真実性」があります-null、または値が「偽り」になる傾向はありません。以下のスニペットが役立つかもしれません:
var temp1;
if ( temp1 )... // false
var temp2 = true;
if ( temp2 )... // true
var temp3 = "";
if ( temp3 ).... // false
var temp4 = "hello world";
if ( temp4 )... // true
うまくいけばそれは役に立ちますか?
また、ダグラス・クロックフォードからこれらのビデオをチェックする価値があります
更新:壊れたリンクを発見してくれて@cphpythonに感謝-作業中のバージョンを指すように更新しました
0
も偽の値であり、その否定は真実です(他の数値への逆も同様!-42 === false
です)。
次の反復に到達するために、ブロックの最後から落ちることがあることを忘れないでください。
$(".row").each( function() {
if ( ! leaveTheLoop ) {
... do stuff here ...
}
});
実際にこのように戻るのではなく、
$(".row").each( function() {
if ( leaveTheLoop )
return; //go to next iteration in .each()
... do stuff here ...
});
ループは、文字どおりに戻った場合にのみ中断します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に適用されます。しかし、実際には、関数の最下部を終了すると、何も返さないので、ループが継続するので、何も返さずにループを継続できなかった可能性はまったくないと思います。ループを続行するために何かを返すことを全員に強制したい場合を除き、何も返さなくてもループを継続できます。
jQuery.noop()が役立ちます
$(".row").each( function() {
if (skipIteration) {
$.noop()
}
else{doSomething}
});