Jeder Ausdruck in Javascript ist auch eine Aussage.
Ausdrücke sind Dinge wie: obwohl
1 + 3
a - b
4 + f(5)
Jeder dieser Ausdrücke zu einem Ergebnis zu bewerten, müssen Sie es nicht erfassen. Genauso wie Sie den Rückgabewert einer Funktion wegwerfen können, indem Sie sie einfach nicht mit einem '=' versehen, können Sie den Rückgabewert jedes Ausdrucks wegwerfen.Folgendes gilt:
function a() {
8 + 5;
"hello";
a == 3;
}
Zugegeben diese Funktion ist nicht sehr nützlich, aber es zeigt, wie Ausdrücke Ausgänge weggeworfen werden kann.
Jetzt, auf das Beispiel, das Sie zur Verfügung gestellt ... Der & & Operator ist eine logische UND. Es nimmt zwei Parameter (jede Seite davon) und bewertet entweder wahr oder falsch. Normalerweise würden Sie es so verwenden:
var result = f(4) && f(5);
Dieser Operator hat auch einen anderen Aspekt zu seinem Verhalten, obwohl; es gibt eine "Kurzschlussauswertung". Was bedeutet das? Überlegen Sie, was ein UND tatsächlich tut; es gibt nur wahr zurück, wenn beide Parameter wahr sind.
Wenn der erste Parameter falsch ist, hat es keinen Sinn, den zweiten zu überprüfen, weil Sie bereits wissen, dass sie nicht beide wahr sind, und Sie wissen, dass Ihr Ergebnis falsch ist. "Kurzschlussauswertung" ist, wenn die Laufzeit das zweite Argument nicht bewertet, wenn das erste Argument bereits alles liefert.
Im Fall von & &, wenn der erste Parameter falsch ist, wird es nicht die Bewertung des zweiten Parameters stören. Wenn der zweite Parameter der Rückgabewert einer Funktion ist, wie z. B. a && b(3)
, wird b (3) NICHT aufgerufen. Wenn a wahr ist, muss andererseits b (3) aufgerufen werden, um herauszufinden, ob a && b(3)
wahr ist.
Dank der Kurzschlussauswertung verhält sich das logische UND also tatsächlich wie ein Wenn-Dann, nur die Auswertung des zweiten Parameters, wenn der erste wahr ist.
Das Gegenteil gilt für die || (ODER) -Operator, wobei der zweite Parameter nur ausgewertet wird, wenn der erste falsch ist (weil wahr ODER alles immer wahr ist).
Zurück zum Anfang dieser Antwort, wo wir über Ausdrücke gesprochen haben, sehen wir, dass der Ausdruck a && b()
nur Standalone verwendet werden kann. Wir müssen das Ergebnis nicht erfassen, wir wollen nur die Kurzschlussauswertung verwenden, um zu steuern, ob b() aufgerufen wird oder nicht. Das letztendliche Ergebnis, richtig oder falsch, wird weggeworfen.
More information on short-circuit evaluation
sie sind gleich, da in der Notation: a && b(), b() nur dann ausgeführt werden, wenn ein truthy ist. Was ist das gleiche wie zu sagen, wenn a wahr ist, dann tu b(). Ich weiß nicht, wie der Compiler diese – Cruiser
&& und || behandelt sind Betreiber. Wie alle Operatoren erzeugen beide ein Ergebnis, das getestet werden kann (eine Bedingung). Alles was "if" ist, testet eine Bedingung und wenn sie wahr ist, wird sie eine Anweisung ausführen. Im trivialen Fall (wo es nur eine Bedingung und keine else-Anweisung gibt), "wenn (a) b()" und "a && b()" äquivalent sind. – Tibrogargan