Javacript verwendet die Kurzschlussauswertung für logische Operatoren ||und &&. Es unterscheidet sich jedoch von anderen Sprachen darin, dass es das Ergebnis des letzten Werts zurückgibt, der die Ausführung angehalten hat, anstelle von a trueoder falsevalue.
Die folgenden Werte werden in JavaScript als falsch angesehen.
- falsch
- Null
"" (leerer String)
- 0
- Nan
- nicht definiert
Die folgenden Beispiele ignorieren die Vorrangregeln des Operators und halten die Dinge einfach. Sie zeigen, welcher Wert die Auswertung angehalten hat und als Ergebnis zurückgegeben wird.
false || null || "" || 0 || NaN || "Hello" || undefined // "Hello"
Die ersten 5 Werte bis NaNsind falsch, daher werden sie alle von links nach rechts ausgewertet, bis sie den ersten Wahrheitswert erfüllen. Dies "Hello"macht den gesamten Ausdruck wahr, sodass alles weiter oben nicht ausgewertet wird und "Hello"als Ergebnis des Ausdrucks zurückgegeben wird . Ebenso in diesem Fall:
1 && [] && {} && true && "World" && null && 2010 // null
Die ersten 5 Werte sind alle wahr und werden ausgewertet, bis sie den ersten falschen Wert ( null) erfüllen , wodurch der Ausdruck falsch wird, also 2010nicht mehr ausgewertet wird und nullals Ergebnis des Ausdrucks zurückgegeben wird.
In dem von Ihnen angegebenen Beispiel wird diese Eigenschaft von JavaScript verwendet, um eine Zuweisung auszuführen. Es kann überall dort verwendet werden, wo Sie den ersten Wahrheits- oder Falschwert unter einer Reihe von Werten erhalten müssen. Dieser Code unten weist den Wert "Hello"zu, bda es einfacher ist, einen Standardwert zuzuweisen, als if-else-Prüfungen durchzuführen.
var a = false;
var b = a || "Hello";
Sie können das folgende Beispiel als Ausnutzung dieser Funktion bezeichnen, und ich glaube, es erschwert das Lesen von Code.
var messages = 0;
var newMessagesText = "You have " + messages + " messages.";
var noNewMessagesText = "Sorry, you have no new messages.";
alert((messages && newMessagesText) || noNewMessagesText);
Innerhalb der Warnung prüfen wir, ob sie messagesfalsch ist, und wenn ja, bewerten und zurückgeben noNewMessagesText, andernfalls bewerten und zurückgeben newMessagesText. Da es in diesem Beispiel falsch ist, halten wir bei noNewMessagesText an und alarmieren "Sorry, you have no new messages.".
$f=$a or $f=$b or $f=$c; // etc. PHP hat sowohl den||Operator als auch denorOperator, die den gleichen Job machen. jedochorausgewertet wird nach Zuordnung während||vor ausgewertet wird. Dies gibt Ihnen auch den perlischen Stil von$a=getSomething() or die('oops');