111 votes

Une instruction javascript if contenant plusieurs conditions les teste-t-elle toutes?

En javascript, lors de l'utilisation d'une instruction if avec plusieurs conditions à tester, n'javascript test tous, indépendamment, ou d'une caution avant de les tester tout si c'est déjà faux?

Par exemple:

 a = 1
 b = 2
 c = 1

 if (a==1 && b==1 && c==1)

Va javascript test pour tous les 3 de ces conditions ou, après avoir vu que b n'est pas égal à 1, et est donc faux, il va sortir de l'énoncé?

Je demande à partir d'un point de vue des performances. Si, par exemple, je suis en essais 3 complexes sélecteurs jQuery, je préfère ne pas avoir de jQuery parcourir le DOM 3 fois si il est évident, par la première qu'il va retourner FALSE. (Dans ce cas, il serait plus logique de nest 3 si consolidés).

ADDENDUM: Plus d'une curiosité, quel est le terme approprié pour cela? Je remarque que beaucoup d'entre vous utilisent le terme de "court-circuit". Aussi, afin de dôme langues de le faire et d'autres pas?

166voto

Anon. Points 26829

L’opérateur && "court-circuite" - c’est-à-dire que si la condition de gauche est fausse, l’évaluation de la bonne ne se fait pas.

De même, l'opérateur || court-circuite si la condition de gauche est vraie.

EDIT: Cependant, vous ne devriez pas vous soucier de la performance tant que vous n’avez pas évalué et déterminé que c’était un problème La micro-optimisation prématurée est le fléau de la maintenabilité.

15voto

Brad Points 415

À partir d'un point de vue des performances, ce n'est pas un micro-optimisation.

Si nous disposons de 3 variables Booléennes, a, b, c, qui est un micro-optimisation.

Si nous appelons les 3 fonctions qui retournent des variables Booléennes, chaque fonction peut prendre du temps, et non seulement est-il important de savoir ce court-circuits, mais dans quel ordre. Par exemple:

si (takesSeconds() && takesMinutes())

est beaucoup mieux que

si (takesMinutes() && takesSeconds())

si les deux sont tout aussi susceptibles de fausse déclaration.

13voto

azazul Points 363

C’est pourquoi vous pouvez utiliser du code javascript comme

 var x = x || 2;
 

Ce qui voudrait dire que si x est indéfini ou autrement «faux», la valeur par défaut est 2.

7voto

albertein Points 10821

Il ne testera toutes les conditions que si les premières sont vraies, testez-le vous-même:

 javascript: alert (false && alert("A") && false);
 

3voto

David M Points 45808

Il court-circuite - seuls a et b seront comparés dans votre exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X