JavaScript-Operatoren
JavaScript-Operatoren werden verwendet, um Werte zuzuweisen, zu vergleichen, arithmetische Operationen durchzuführen und mehr. Dieses Kapitel beschreibt alle wichtigen Operatoren.
Einführung
Ein Operator nimmt einen oder mehrere Werte (seine Operanden) und erzeugt einen neuen Wert. In JavaScript verwenden Sie Operatoren, um Arithmetik durchzuführen, Werte zu vergleichen, Werte Variablen zuzuweisen und logische Bedingungen zu erstellen. Dieses Kapitel behandelt die Operatoren, die man täglich benötigt — Zuweisung, Arithmetik, Vergleich und string-Verkettung — erklärt die Typumwandlung, die manche Ergebnisse überraschend macht, und endet mit einer Referenz zur Operatorpriorität, damit Sie wissen, was zuerst ausgewertet wird.
Ein paar Begriffe, die durchgängig verwendet werden:
- Operand — der Wert, auf den ein Operator angewendet wird. In
5 + 3sind5und3Operanden. - Unärer Operator — nimmt einen Operanden (z. B.
-x). - Binärer Operator — nimmt zwei Operanden (z. B.
x + y). - Ternärer Operator — nimmt drei Operanden; JavaScript hat genau einen (
?:).
Zuweisungsoperatoren
Der grundlegende Zuweisungsoperator = speichert einen Wert in einer Variable. Die zusammengesetzten Zuweisungsoperatoren kombinieren eine arithmetische Operation mit der Zuweisung, sodass x += 5 eine Kurzschreibweise für x = x + 5 ist.
| Operator | Beispiel | Entspricht |
|---|---|---|
= | x = 5 | — |
+= | x += 5 | x = x + 5 |
-= | x -= 5 | x = x - 5 |
*= | x *= 5 | x = x * 5 |
/= | x /= 5 | x = x / 5 |
%= | x %= 5 | x = x % 5 |
**= | x **= 2 | x = x ** 2 |
Beachten Sie, dass = eine Zuweisung ist, kein Vergleich. Um Werte zu vergleichen, verwenden Sie === oder == (siehe unten).
Arithmetische Operatoren in JavaScript
Grundoperatoren: Addition (+), Subtraktion (-), Multiplikation (*) und Division (/)
Diese Operatoren führen die vier grundlegenden arithmetischen Operationen durch.
Modulo (%) und Potenzierung (**)
Modulo (%) gibt den Rest einer Division zurück — nützlich für Tests wie „Ist diese Zahl gerade?" (n % 2 === 0). Potenzierung (**) erhebt eine Zahl in eine Potenz.
Unäres Plus und Minus
- negiert einen Wert, und das unäre + wandelt seinen Operanden in eine Zahl um — eine schnelle Möglichkeit, einen numerischen string in eine Zahl zu konvertieren.
Inkrement (++) und Dekrement (--)
++ addiert 1 zu einer Variable und -- subtrahiert 1. Ihre Position ist entscheidend: Die Präfix-Form (++x) ändert den Wert und gibt den neuen zurück, während die Postfix-Form (x++) zuerst den alten Wert zurückgibt und ihn dann ändert.
JavaScript-Vergleichsoperatoren
Vergleichsoperatoren geben immer einen boolean-Wert (true oder false) zurück. Weitere Details finden Sie im dedizierten Kapitel Vergleichsoperatoren.
Strikte (===) und lose (==) Gleichheit
Strikte Gleichheit (===) gibt nur dann true zurück, wenn beide Operanden denselben Typ und denselben Wert haben — sie konvertiert niemals Typen. Lose Gleichheit (==) wandelt die Operanden zunächst in einen gemeinsamen Typ um und vergleicht dann, was zu überraschenden Ergebnissen führen kann.
Ihre negierten Formen sind !== (strikte Ungleichheit) und != (lose Ungleichheit).
Bevorzugen Sie === und !==. Strikte Vergleiche vermeiden die versteckten Typumwandlungen von == und machen Ihren Code vorhersehbar. Verwenden Sie == nur, wenn Sie absichtlich eine Typumwandlung wünschen (zum Beispiel matcht value == null sowohl null als auch undefined).
Größer als (>), Kleiner als (<) und deren „oder gleich"-Varianten
Diese Operatoren vergleichen die Reihenfolge. Sie haben auch die Varianten >= (größer als oder gleich) und <= (kleiner als oder gleich).
Vergleich nicht-numerischer Werte
Bei relationalen Operatoren (<, >, <=, >=) führt JavaScript eine Typumwandlung durch. Die Regel: Wenn beide Operanden strings sind, werden sie Zeichen für Zeichen (alphabetisch) verglichen; andernfalls werden beide Operanden vor dem Vergleich in Zahlen umgewandelt.
Das erklärt ein Ergebnis, das auf den ersten Blick falsch wirkt:
NaN-Vergleiche
NaN (Not-A-Number) ist der einzige Wert, der mit nichts gleich ist, nicht einmal mit sich selbst. Daher kann === NaN niemals zur Erkennung verwendet werden. Verwenden Sie stattdessen Number.isNaN().
String-Verkettung und der binäre +-Operator
Strings verketten
In JavaScript wird der +-Operator sowohl für numerische Addition als auch für string-Verkettung verwendet.
Binäres + und Typumwandlung
Wenn ein Operand ein string ist, wandelt JavaScript den anderen ebenfalls in einen string um.
Bewährte Methoden für die Verkettung
Verwenden Sie Template-Literale für mehr Klarheit und um Verwechslungen mit der numerischen Addition zu vermeiden.
Logische, bedingte und Typoperatoren
JavaScript verfügt über weitere Operatorfamilien, die jeweils ein eigenes Kapitel haben. Hier ist eine kurze Übersicht, damit Sie wissen, was sie tun und wo Sie mehr lesen können.
Logische Operatoren (&&, ||, !)
&& (UND), || (ODER) und ! (NICHT) kombinieren boolean-Bedingungen. && und || sind auch kurzschließend und geben einen ihrer Operanden zurück (nicht immer einen boolean), was sie praktisch für Standardwerte und Schutzprüfungen macht. Siehe Logische Operatoren.
Bedingter (ternärer) Operator (?:)
Der ternäre Operator ist ein kompaktes if/else, das einen Wert zurückgibt: Bedingung ? WertWennWahr : WertWennFalsch. Siehe Bedingte Operatoren.
typeof und instanceof
typeof gibt einen string zurück, der den Typ eines Werts benennt. instanceof prüft, ob ein object von einem bestimmten Konstruktor erstellt wurde — behandelt in Klassen-Überprüfung: instanceof.
Operatorpriorität
Wenn ein Ausdruck Operatoren kombiniert, entscheidet die Priorität, welcher zuerst ausgeführt wird, und die Assoziativität bestimmt die Reihenfolge bei Operatoren gleicher Priorität. Zum Beispiel hat * eine höhere Priorität als +, sodass 2 + 3 * 4 gleich 14 ist, nicht 20.
Hier sind die gängigen Operatoren von der höchsten zur niedrigsten Priorität:
| Priorität | Operatoren | Beschreibung |
|---|---|---|
| Höchste | () | Gruppierung |
++ -- (Postfix) | Postfix-Inkrement/-Dekrement | |
! + - ++ -- typeof (Präfix) | Unäre Operatoren | |
** | Potenzierung (rechtsassoziativ) | |
* / % | Multiplikation, Division, Rest | |
+ - | Addition, Subtraktion | |
< <= > >= instanceof | Relationale Vergleiche | |
== != === !== | Gleichheit | |
&& | Logisches UND | |
|| | Logisches ODER | |
? : | Bedingt (ternär) | |
| Niedrigste | = += -= … | Zuweisung (rechtsassoziativ) |
Im Zweifelsfall Klammern hinzufügen. Sie kosten zur Laufzeit nichts und machen die beabsichtigte Reihenfolge für den nächsten Leser offensichtlich.
Zusammenfassung und häufige Stolperfallen
- Verwenden Sie
===/!==, nicht==/!=, es sei denn, Sie möchten gezielt eine Typumwandlung. '2' < trueistfalse, weil relationale Operatoren nicht-string-Operanden in Zahlen umwandeln (2 < 1).- String-Vergleiche sind alphabetisch, daher ist
'10' < '9'true, obwohl10 < 9falseist. - Testen Sie auf NaN mit
Number.isNaN(x)—x === NaNist immerfalse. +ist überladen: Mit einem string-Operanden verkettet es ('3' + 2ergibt'32'); bevorzugen Sie Template-Literale für mehr Klarheit.x++gibt den alten Wert zurück,++xden neuen.**und=sind rechtsassoziativ; die meisten anderen binären Operatoren sind linksassoziativ.- Greifen Sie auf Klammern zurück, anstatt die vollständige Prioritätstabelle auswendig zu lernen.