0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

jQuery.each(=$.each)は何でreturn falseでループを抜けるんだ?

Last updated at Posted at 2022-08-14

はじめに

jQueryの$.eachは、一般的なforeachと異なり以下の特徴があります。

①break・continueは使えない
②return falseをすることでbreak相当を、returnもしくはreturn trueをすることでcontinue相当をすることができる

コード例としては公式のドキュメントを参照のこと。ドキュメントにはcontinue相当の例はないですが、false以外にしてif以降に処理を書くとcontinue相当の動きをすることがわかります。

この記事では、①・②が何故なのかを確認します。自分はreturn trueとreturn falseのどっちがbreakでどっちがcontinueなんだ?といつも迷ってググっているので、特に②についてどっちがどっちなのかを理解できることを目指します。

jQueryのソースコードを確認

というわけでjQueryのeachのソースコードを探したら以下にありました。

以下該当部分の抜き出しです。

	each: function( obj, callback ) {
		var length, i = 0;

		if ( isArrayLike( obj ) ) {
			length = obj.length;
			for ( ; i < length; i++ ) {
				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
					break;
				}
			}
		} else {
			for ( i in obj ) {
				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
					break;
				}
			}
		}

		return obj;
	},

①については、各要素に対しての処理を書いている部分はcallbackというfunctionであり、break・continueが使えるforEachの中身の記述ではないということがわかります。
②については、そのcallbackの戻り値がfalseの時のみbreakし、それ以外の時は次のループを実施するという実装になっているからということがわかりました。

おまけ ほかの言語(C#(.Net))との比較

以前の記事で同じような内容をC#について書いています。

break・continueが使えない理由については同じ理由だろうというのは察しがついていて実際同じだったのですが、戻り値のtrue/falseでbreak・continue相当のことができるのは相違点なので見比べると面白いです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?