#forループ内とforEach内では挙動が違う
あるeventの中に、自分が参加者に入っているか確認するプログラム。
参加者に自分がいればtrue
、いなければfalse
を返したい。
for文と同じ感覚てforEachを使ってしまい、returnが期待した値にならずはまった。
#実際のコードでの比較
##for文の場合
for文
for (i = 0; i < participants.length; i++) {
if(participants[i].id == myID) {
return true;
}
}
return false;
participants[i].id == myIDがtrueになったとき、for文もメソッドも抜けてtrueがreturnされる。
##forEach文の場合
forEach
participants.forEach(function (participant) {
if(participant.id == myID) {
return true;
}
})
return false;
forEachの場合、participantsの全ての要素に対して処理を実行する。
処理の中でreturnしても、forEach文を抜けることは出来ない。
participant.id == myIDがtrueになっても、次の要素に対する処理に移る。
そして最終的にforEachを抜けて、必ず undefined がreturnされる。