2010-06-27 6 views
30

Jetzt, bevor Sie alle auf mich springen und sagen, "Sie sind über die Leistung besorgt", lassen Sie es hiermit stehen, dass ich das mehr aus Neugier als vielmehr eine übereifrige Natur frage. Das sagte ...Javascript && Operator versus nested wenn Aussagen: Was ist schneller?

Ich bin neugierig, ob es einen Leistungsunterschied zwischen der Verwendung der & (&) ("und") -Operator und verschachtelte if-Anweisungen gibt. Gibt es auch einen tatsächlichen Verarbeitungsunterschied? I.e., tut & & immer Prozess beide Aussagen, oder wird es aufhören @ die erste, wenn die erste fehlschlägt? Wie wäre das anders als verschachtelte if-Anweisungen?

A) & & ("und") Operator

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

im Vergleich zu B), wenn Aussagen

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

Antwort

29

Der Leistungsunterschied ist vernachlässigbar. Der Operator && prüft den Ausdruck der rechten Hand nicht, wenn der linke Ausdruck false auswertet. Der Operator & wird jedoch sowohl unabhängig prüfen, möglicherweise wird Ihre Verwirrung durch diese Tatsache verursacht.

In diesem speziellen Beispiel würde ich nur das mit && wählen, da das besser lesbar ist.

+1

war erzwungener & Operator nicht bewusst. Das ist interessant! –

+14

Beachten Sie, dass '&' der Operator/bitwise/and ist. Es als "erzwungene" Version von "&&" zu betrachten ist nicht ganz korrekt. Beispiel: '1 && 2' ist 2, während' 1 & 2' 0 ist. –

2

Wie verschachtelt if s verschachtelt, && ist:

Beispiele klar sein, faul.
Der Ausdruck a && b wertet nur b aus, wenn a die Wahrheit ist.

Daher sollten die beiden Fälle in Funktionalität und Leistung vollständig identisch sein.

+2

Sie wahrscheinlich gemeint "wird nur b bewerten, wenn a ist wahrheitsgemäß". –

11

Wenn Sie über die Leistung besorgt sind, stellen Sie sicher, dass a==b eher als c==d schlägt. Auf diese Weise wird die if Anweisung früh fehlschlagen. up

+1

Könnte jemand etwas Licht darauf werfen, warum ich eine Antwort auf meine Antwort bekommen habe? –

+0

Ich weiß es nicht - Ihr Vorschlag scheint mir gut zu sein, also habe ich Sie upvolotiert. –

+0

Meine Vermutung ist die -1 war, weil es nicht reealally * die Frage, die eine Neugier auf einen bestimmten Punkt von Javascript war, eher als allgemeine Optimierung. – Matchu

1

könnte ein peformance Test klare Dinge helfen: http://jsperf.com/simey-if-vs-if

der Leistungsunterschied scheint zwischen den beiden unglaublich negligable ist; Wie @Gert bereits erwähnt hat, verbessert das frühzeitige Scheitern jedoch die Dinge.