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 true
oder false
value.
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 NaN
sind 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 2010
nicht mehr ausgewertet wird und null
als 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, b
da 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 messages
falsch 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 denor
Operator, die den gleichen Job machen. jedochor
ausgewertet wird nach Zuordnung während||
vor ausgewertet wird. Dies gibt Ihnen auch den perlischen Stil von$a=getSomething() or die('oops');