Die logische Und-Verknüpfung in JavaScript
Einführendes Beispiel
Die logische Und-Verknüpfung wertet die linke Seite aus und ergibt deren Wert, falls er falschartig ist.
- Auswertung
0 && 'def'
0
Ansonsten wertet sie die rechte Seite aus und ergibt den Wert der rechten Seite.
- Auswertung
'abc' && 14
14
Bezeichnung
Diese Und-Verknüpfung wird als „logische Und-Verknüpfung“ bezeichnet.
Sprechweisen
Der Operator »&&« wird als „und“ gesprochen, wenn es dabei verständlich wird, daß die logische Und-Verknüpfung gemeint ist und nicht eine Summe oder eine andere Art einer Und-Verknüpfung. Ansonsten muß eine ausführlichere Sprechweise wie „der logische Und-Operator“ verwendet werden.
Schreibweisen
- JavaScript
&&
In der Mathematik (Logik) und in der deutschen Sprache gibt es keine genaue Entsprechung dieser „logischen“ Und-Verknüpfung.
Morphologie
Der Operator »&&« besteht aus einer Folge zweier kommerzieller Und-Zeichen »&«. Er stellt eine lexikalische Einheit dar, die nie von Leerraum umgeben sei muß und keinen Leerraum enthalten darf.
Syntax
Der Operator »&&« ist ein binärer Infix-Operator.
Priorität
Die Priorität dieses Operators ist etwas kleiner als die von Gleichheitsprüfungen.
- Eigenschaften von Operatoren
A P A (A = Aritaet, P = Position, A = Assoziativitaet)
[Zirkumfix, Praefix, pOstfix, Infix, Sonstige]() 1 Z Eingeklammerter Ausdruck
() S Aufruf
+ - ! typeof delete 1 P Unaere vorangestellte Operatoren (Vorzeichen)
* / 2 I L "Punktrechnung": Multiplikation, Division
+ - 2 I L "Strichrechnung": Addition, Subtraktion
< 2 I L Kleiner
== != === !== 2 I L gleichartig, ungleichartig, gleich, ungleich
&& 2 I L logische Und-Verknuepfung
?: 3 I R bedingte Auswertung
= ()=> 2 I R Zuweisung, Klammerpfeil
Assoziativitätsrichtung
Dieser Operator ist linksassoziativ.
Semantik
Die Semantik wurde schon weiter oben unter „Einführendes Beispiel“ beschrieben.
Einfache Beispiele
Die folgenden Beispiele werten nur die linke Seite aus, da sie falschartig ist. Sie haben dann den Wert der linken Seite.
- Auswertung
undefined && 7
undefined
- Auswertung
NaN && false
NaN
- Auswertung
'' && 'abc'
""
- Auswertung
false && true
false
- Auswertung
false && false
false
- Auswertung
false && console.log( "log" )
false
Die folgenden Beispiele werten erst die linke Seite und dann die rechte Seite aus, da die linke Seite nicht falschartig ist. Sie haben dann den Wert der rechten Seite.
- Auswertung
7.2 && 22
22
- Auswertung
true && 'abc'
"abc"
- Auswertung
true && false
false
- Auswertung
true && true
true
- Auswertung
true && console.log( "log" )
log
undefined
Weitere Beispiele
Und-Kaskaden (Und-Sequenz)
Eine Kaskade von Und-Ausdrücken ergibt den ersten Wert, der falschartig ist, oder den letzten Wert, falls keiner falschartig ist.
Die Kaskade bedeutet dasselbe wie der darunterstehende Ausdruck mit Klammern. (Die Und-Verknüpfung ist linksassoziativ.)
- Auswertungen
false && 0 && 7
false
( false && 0 )&& 7
false
false && 0
false
( false )&& 7
false
- Auswertungen
true && 0 && 7
0
( true && 0 )&& 7
0
true && 0
0
( true )&& 7
7
- Auswertungen
true && 1 && 7
7
( true && 1 )&& 7
0
true && 1
1
( 1 )&& 7
0
Wirkungen
Die Definition von Funktionen durch den Programmierer erlaubt es, Auswertung von Ausdrücken zu verfolgen.
- Auswertungen
p = x =>{ console.log( i, x ); i = i + 1; return x; }
i = 0
p( true )&& p( false )0 true
1 false
false
i = 0
p( false )&& p( true )0 false
false
i = 0
p( true )&& p( true )&& p( true )&& p( false )&& p( false )&& p( false )0 true
1 true
2 true
3 false
false
Anwendungsbeispiele
Wächter
Die linke Seite kann als „Wächter“ fungieren, der die Ausführung der rechten Seite nur dann gestattet, wenn er wahrartig ist.
Dies ähnelt einem ternären Operator, aber der alternative Zweig (für den Fall, daß der ersten Ausdruck falschartig ist) entfällt hier (wie ein einer if-Anweisung).
- Auswertungen
p = x =>{ console.log( i, x ); i = i + 1; return x; }
i = 0
false && p( 'ausgefuehrt' )false
i = 0
true && p( 'ausgefuehrt' )0 ausgefuehrt
"ausgefuehrt"
Erfolgssequenz
Unter einem „Versuch“ verstehen wir hier eine Funktion, die versucht, eine Aufgabe zu erledigen, und einen wahrartigen Wert genau dann zurückgibt, wenn der Versuch erfolgreich war.
Wenn mehrere Versuche hintereinander unternommen werden sollen, und eine Fortsetzung nur dann sinnvoll ist, wenn alle bisherigen Versuche erfolgreich waren, dann kann es durch eine Und-Sequenz erreicht werden, daß die Versuchsfolge abgebrochen wird, wenn zum ersten Mal ein Versuch scheitert.
- Beispiel
DateiHolen() &&
DateiAnalysieren() &&
ErgebnisDrucken()
Das Analysieren soll nur erfolgen werden, wenn das Holen erfolgreich war, und das Drucken nur, wenn das Analysieren erfolgreich war.
Zusammengesetzte Aussagen
Eine Und-Verknüpfung kann verwendet werden, um eine Konjunktion (eine Und-Aussage) zu schreiben.
- Auswertungen
schulnote =( x )=>{ return 0 < x && x < 7; }
function schulnote()
schulnote( -1 )
false
schulnote( 0 )
false
schulnote( 1 )
true
schulnote( 2 )
true
schulnote( 5 )
true
schulnote( 6 )
true
schulnote( 7 )
false
schulnote( 8 )
false
Vermeiden einer Division durch 0
Mit der Und-Verknüpfung kann eine Funktion geschrieben werden, die den Kehrwert einer Zahl oder »false« zurückgibt. »false« wird zurückgegeben, wenn die Zahl gleich »0« ist, weil dann eine Berechnung des Kehrwerts nicht möglich ist.
- Auswertungen
kehrwert_oder_false =( x )=>{ return x != 0 && 1/x; }
kehrwert_oder_false( 2 )
0.5
kehrwert_oder_false( 0 )
false
Eine alternative Implementation mit dem ternären Operator:
- Auswertungen
kehrwert_oder_false =( x )=>{ return x != 0 ? 1/x : false; }
Absicherung eines Eintragsausdrucks
Bei der Absicherung eines Eintragsausdrucks wird vor der Auswertung sichergestellt, daß der als Verzeichnis verwendete Ausdruck nicht »null« oder »undefined« ist.
- Auswertungen
if( style && style.fontSize )el.style.fontSize = "2em"
Erkennung des ECMAScript -Typs „Objekt“
Die folgende Funktion erkennt den ECMAScript -Typ „Objekt“. (In ECMAScript ist der Typ von »null« nicht »object«, sondern „Null “).
- ECMAScript-Objekt-Erkenner
x => typeof x === 'object' && x !== null