Operatoren
Ziele
- Du kennst den Unterschied zwischen Vergleichs-Operatoren und logischen Operatoren.
- Du kennst spezielle Operatoren wie
!!
,??
,??=
und kannst diese anwenden.
Vergleiches und logische Operatoren
Vergleichsoperatoren (comparison operators)
Vergleichsoperatoren werden verwendet, um den Wert zweier Variablen oder Ausdrücke miteinander zu vergleichen. Es existieren die folgenden Vergleichsoperatoren:
- Gleichheit (
==
) - Ungleichheit (
!=
) - Strikte Gleichheit (
===
) - Strikte Ungleichheit (
!==
) - Grösser als (
>
) - Kleiner als (
<
) - Grösser-Gleich (
>=
) - Kleiner-Gleich (
<=
)
|
|
Unterschiede von Gleichheit und strikter Gleichheit
- Das doppelte Gleichheitszeichen
==
führt einen “schwachen” Vergleich durch. Das bedeutet konkret, dass JavaScript bei der Verwendung des doppelten Gleichheitszeichens versucht, den Wert beider Operanden zu vergleichen, indem es sie in einen gemeinsamen Typen konvertiert. Wenn die Operanden unterschiedliche Datentypen haben, führt JavaScript implizite Typumwandlungen durch, um sie zu vergleichen. - Das dreifache Gleichheitszeichen
===
führt einen “starken” Vergleich durch. Das bedeutet konkret, dass JavaScript bei der Verwendung des dreifachen Gleichheitszeichens nicht nur den Wert der Operanden vergleicht, sondern auch ihren Datentyp im Vergleich berücksichtigt. Sollten die Operanden unterschiedliche Datentypen haben, wird als Ergebnis eines Vergleichs mit dem dreifachen Gleichheitszeichen immerfalse
resultieren.
Hier sind einige Beispiele, die den Unterschied zwischen ==
und ===
genauer veranschaulichen:
|
|
Logische Operatoren (logical operators)
Logische Operatoren werden verwendet, um mehrere Bedingungen miteinander zu kombinieren und Ausdrücke zu evaluieren. Hierbei gibt es folgende Operatoren:
- Bitwise AND (
&
) - AND (
&&
) - Bitwise OR (
|
) - OR (
||
) - NOT (
!
)
Bitwise AND
Der bitwise AND-Operator vergleicht jedes Bit in den beiden Operanden und gibt für jede Bitposition im Ergebnis eine 1 zurück, wenn sowohl der linke als auch der rechte Operand an dieser Bitposition eine 1 haben. Wenn der linke oder der rechte Operand eine 0 an dieser Bitposition hat, gibt der bitweise AND-Operator auch eine 0 zurück.
Beispiel:
|
|
AND (logisches AND)
Der AND-Operator wird verwendet, um zu überprüfen, ob alle Operanden, auf die er angewandt wird, true
sind. Wenn ja, gibt er den Wert true
zurück, andernfalls gibt er false
zurück. Der Operator wird häufig in Bedingungen verwendet, um zu überprüfen, ob mehrere Bedingungen erfüllt sind, bevor eine Aktion ausgeführt wird.
Beispiel:
|
|
Bitwise OR
Der bitweise OR-Operator vergleicht jedes Bit innerhalb der beiden Operanden und gibt für jede Bitposition im Ergebnis eine 1 zurück, wenn entweder der linke oder der rechte Operand oder beide Operanden an dieser Bitposition eine 1 haben. Wenn sowohl der linke als auch der rechte Operand an dieser Bitposition eine 0 haben, gibt der bitweise OR-Operator eine 0 zurück.
Beispiel:
|
|
OR (logisches OR)
Der OR-Operator wird verwendet, um zu überprüfen, ob mindestens einer der Operanden, auf die er angewendet wird, wahr ist. Wenn ja, gibt er den Wert true
zurück, andernfalls gibt er false
zurück. Der Operator wird häufig in Bedingungen verwendet, um alternative Bedingungen zu überprüfen und eine Aktion auszuführen, wenn mindestens eine der Bedingungen erfüllt ist.
Beispiel:
|
|
NOT (logisches NOT)
Der NOT-Operator wird verwendet, um einen booleschen Wert umzukehren, was heisst, dass true
zu false
und false
zu true
wird. Wenn ein Operand true
ist, gibt der Operator false
zurück, und wenn der Operand false
ist, gibt er true
zurück. Der Operator wird häufig in Bedingungen verwendet, um die Aussage einer Bedingung umzukehren.
Beispiel:
|
|
Special Operators
doppeltes NOT (!!
)
Der doppelte NOT-Operator wird verwendet, um einen Wert in einen booleschen Wert umzuwandeln. Die erste Negation kehrt den Wert um und die zweite Negation kehrt ihn wieder zurück, sodass der resultierende Wert immer ein boolescher Ausdruck ist. War der ursprüngliche Wert truthy, so wird das Ergebnis true
sein, andernfalls false
. Der doppelte Negationsoperator wird häufig verwendet, um sicherzustellen, dass ein Wert wirklich einem booleschen Ausdruck entspricht.
|
|
Logischer OR Assignment Operator (||=
)
Der Operator ||=
prüft, ob die linke Seite des Operators falsy ist. Wenn die linke Seite falsy ist, wird der rechte Operand ausgewertet und der Wert diesem zugewiesen. Wenn die linke Seite truthy ist, wird der linke Wert beibehalten und kein weiterer Ausdruck ausgewertet.
Beispiel:
|
|
Logischer AND Assignment Operator (&&=
)
Der Operator &&=
prüft, ob die linke Seite des Operators truthy ist. Wenn die linke Seite truthy ist, wird der rechte Operand ausgewertet und der Wert diesem zugewiesen. Wenn die linke Seite falsy ist, wird der linke Wert beibehalten und kein weiterer Ausdruck ausgewertet.
Beispiel:
|
|
nullish coalescing Assignment Operator (??=
)
Der Operator ??=
prüft, ob die linke Seite des Operators null
oder undefined
ist. Wenn die linke Seite null
oder undefined
ist, wird der rechte Operand ausgewertet und der Wert diesem zugewiesen. Wenn die linke Seite einen anderen falsy Wert als null
oder undefined
hat, wird der linke Wert beibehalten und kein weiterer Ausdruck ausgewertet.
Beispiel:
|
|
nullish coalescing Operator (??
)
Der Operator ??
gibt den linken Ausdruck zurück, wenn er null
oder undefined
ergibt, andernfalls gibt er den rechten Ausdruck zurück. Im Gegensatz zum logischen OR-Operator (||
) behandelt der Nullish Coalescing-Operator nur null
und undefined
als falsy Werte, und alle anderen Werte werden als truthy behandelt.
Beispiel:
|
|
ternary Operator (?:
)
Der Ternary-Operator (?:
) ermöglicht es, eine Zuweisung kombiniert mit einer Bedingung (if
/else
) auf eine einzige Anweisung zu reduzieren.
Schauen wir uns hierfür folgendes Beispiel an, für das eine if
/else
-Struktur umgesetzt wird:
|
|
Hier haben wir 6 Zeilen Code gebraucht, um bedingt eine Variable zu setzen. Mit dem ternary-Operator können wir das Ganze auf eine Zeile reduzieren (und wir können direkt das Ergebnis per const
zuweisen):
|
|
Oft wird diese Syntax bei Zuweisungen verwendet, kann aber auch anderorts verwendet werden, beispielsweise für Parameter:
Beispiel:
|
|
Ganz allgemein lautet die Syntax:
|
|
Zuerst wird die Bedingung (condition) ausgewertet. Wenn diese true
entspricht, wird expression1
ausgeführt und zurückgegeben, andernfalls expression2
.