J'essaie de parcourir un tableau d'éléments. La documentation de jQuery dit:
Renvoyer non-false est identique à une instruction continue dans une boucle for, elle passera immédiatement à la prochaine itération.
J'ai essayé d'appeler 'return non-false'; et 'non-faux;' (sans retour) dont aucun ne passe à la prochaine itération. Au lieu de cela, ils cassent la boucle. Qu'est-ce que je rate?
Ce qu'ils entendent par non-faux est:
return true;
Donc ce code:
var arr = [ "one", "two", "three", "four", "five" ];
$.each(arr, function(i) {
if(arr[i] == 'three') {
return true;
}
alert(arr[i]);
});
Va alerter un, deux, quatre, cinq
Par "return non-false", ils entendent renvoyer toute valeur qui ne fonctionnerait pas comme booléen false. Ainsi, vous pouvez retourner true
, 1
, 'non-false'
, ou tout ce que vous pouvez imaginer.
Javascript a en quelque sorte l'idée de "véracité" et de "fausseté". Si une variable a une valeur, généralement (comme vous le verrez), elle a la "véracité" - nulle ou aucune valeur tend à la "fausseté". Les extraits ci-dessous pourraient vous aider:
var temp1;
if ( temp1 )... // false
var temp2 = true;
if ( temp2 )... // true
var temp3 = "";
if ( temp3 ).... // false
var temp4 = "hello world";
if ( temp4 )... // true
J'espère que ça aide?
En outre, il vaut la peine de regarder ces vidéos de Douglas Crockford
mise à jour: merci @cphpython pour avoir repéré les liens brisés - J'ai mis à jour mes versions actuelles
N'oubliez pas que vous pouvez parfois tomber de la fin du bloc pour passer à la prochaine itération:
$(".row").each( function() {
if ( ! leaveTheLoop ) {
... do stuff here ...
}
});
Plutôt que de revenir comme ça:
$(".row").each( function() {
if ( leaveTheLoop )
return; //go to next iteration in .each()
... do stuff here ...
});
La boucle niquement se rompt si vous retournez littéralement false
. Ex:
// this is how jquery calls your function
// notice hard comparison (===) against false
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
Cela signifie que vous pouvez retourner n'importe quoi d'autre, y compris undefined
, ce que vous retournez si vous ne retournez rien, vous pouvez donc simplement utiliser une instruction return vide:
$.each(collection, function (index, item) {
if (!someTestCondition)
return; // go to next iteration
// otherwise do something
});
Il est possible que cela varie selon les versions. Ceci est applicable pour JQuery 1.12.4. Mais vraiment, quand vous sortez du bas de la fonction, vous ne retournez rien non plus, et c'est pourquoi la boucle continue, alors je m'attendrais à ce qu'il n'y ait aucune possibilité que rien ne retourne not continuer le boucle. À moins qu'ils ne veuillent forcer tout le monde à commencer à retourner quelque chose pour que la boucle continue, à ne rien retourner a soit un moyen de continuer.