web-dev-qa-db-fra.com

Opérateur Javascript && versus instructions if imbriquées: qu'est-ce qui est plus rapide?

Maintenant, avant que vous ne sautiez tous sur moi et que vous disiez "vous êtes trop préoccupé par la performance", permettez-moi de demander par la présente plus par curiosité que par nature trop zélée. Cela dit...

Je suis curieux de savoir s'il existe une différence de performances entre l'utilisation de l'opérateur && ("et") et les instructions if imbriquées. Existe-t-il également une différence de traitement réelle? C'est-à-dire que && toujours traite les deux instructions, ou arrêtera-t-il @ la première si la première échoue? En quoi cela serait-il différent des instructions imbriquées?

Exemples pour être clair:

A) && ("et") opérateur

if(a == b && c == d) { ...perform some code fashizzle... }

contre B) imbriquées si les instructions

if(a == b) {
    if(c == d) { ...perform some code fashizzle... }
}
34
arxpoetica

La différence de performance est négligeable. L'opérateur && Ne vérifie pas l'expression de droite lorsque l'expression de gauche évalue false. Cependant, l'opérateur & Vérifiera les deux indépendamment, peut-être que votre confusion est causée par ce fait.

Dans cet exemple particulier, je choisirais simplement celui qui utilise &&, Car c'est mieux lisible.

30
BalusC

Si vous êtes préoccupé par les performances, assurez-vous que a==b est plus susceptible d'échouer que c==d. De cette façon, l'instruction if échouera tôt.

12
Gert Grenander

Un test de performance pourrait aider à clarifier les choses: http://jsperf.com/simey-if-vs-if

Il semble que la différence de performances soit incroyablement négligeable entre les deux; Cependant, comme @Gert l'a mentionné, un échec précoce améliore vraiment les choses.

3
simey.me

Comme les if imbriqués, && est paresseux.
L'expression a && b n'évaluera b que si a est véridique.

Par conséquent, les deux cas doivent être complètement identiques, tant en termes de fonctionnalités que de performances.

2
SLaks