Man will mit Javascript nicht nur verschiedene Daten darstellen, sondern auch mit Ihnen arbeiten, beispielsweise um einen Spielstand zu errechnen, den Gesamtwert eines Warenkorbs errechnen oder nach dem Einloggen den Namen des Users anzuzeigen. Dazu verwendet man Operatoren.
Eine mathematische Formel nennt man Ausdruck. Ein Ausdruck liefert immer ein Ergebnis. In einem Ausdruck kommen Operanden und Operatoren vor. siehe auch
| 3 | + | 4 |
| Operand | Operator | Operand |
Die Operanden können Variablen oder einfache Werte sein. Einfache Werte nennt man Literale. Literal bedeutet nichts weiter, als dass der gesamte Wert in einem Schritt
aufgeschrieben
wird, statt ihn erst in mehreren Schritten aufzubauen.
x = 3; x = "Hallo"; x = ["Haus","Baum","Straßenlampe"];
Desweiteren gibt es in Programmiersprachen Anweisungen, die man nicht mit Ausdrücken verwechseln sollte. Eine Anweisung ist ein Befehl, der mit Semikolon abgeschlossen wird.
Mehrere Anweisungen können als Codeblöcke in geschweiften Klammern eingefasst werden.
{
Anweisung;
Anweisung;
Anweisung;
}
Ein Operator, der sich nur auf einen Wert bezieht nennt man unären Operator (++), einen Operator der sich auf 2 Werte bezieht nennt man binären Operator (+). Es gibt in Javascript auch Operatoren, die sich auf 3 Wert beziehen, den ternären Operator.
Rechenoperatoren oder arithmetische Operatoren arbeiten mit Zahlen dem Datentyp Number.
Punktrechnung geht vor Strichrechnung. In Klammern gefasste Rechenoperationen werden zusammengefasst ausgerechnet.
| Rechenart | Zeichen | Beispiel | Info |
|---|---|---|---|
| Addition | + | let x = 3+2; | Ergebnis 5 |
| Subtraktion | - | let x = 4-1; | Ergebnis 3 |
| Multiplikation | * | let x = 3 * 5; | Ergebnis 15 |
| Division | / | let x = 6 / 2; | Ergebnis 3 |
| Modulo | % | let x = 13 % 2; | Der Restwert einer Division wird zurückgegeben. In diesem Beispiel ist es der Wert 1. 13 / 2 ist 6 Rest 1 Beispiel |
| Inkrement | ++ | x++; | Der vorhandene Wert von x wird um 1 erhöht. aus 2 wird 3 |
| Dekrement | -- | x-- | Der vorhandene Wert wird um 1 verringert. Aus 2 wird 1; |
Oft will man den Wert einer Variablen um 1 erhöhen oder verringern.
Mit Inkrementoren kann man einen vorhandenen Wert um eins erhöhen mit Dekrementoren kann man einen vorhandenen Wert um eins verringern.
let x = 5; x = x + 1;
Stattdessen kann man schreiben.
let x = 5; x++;
Wenn man Inkrement oder Dekrement innerhalb eines Ausdrucks nutzt und möchte, dass der Wert vor dem Auswerten
des Ausdrucks verringert oder erhöht wird, schreibt man den Inkrementor oder Dekrementor vor die Varibale. Das
nennt man Präinkrement oder Prädekrement. Wir sehen im folgendem Beispiel, dass erst beim zweiten
console.log der Wert von x um 1 erhöht wurde (Postinkrement). Im dritten
console.log sieht man, dass es schon im console.log Aufruf erhöht wurde
(Präinkrement). Beispiel
let x = 5;
console.log(x++); //5
console.log(x); //6
console.log(++x); //7
Will man den Wert einer Variablen um einen bestimmten Betrag erhöhen oder verringern, so könnte man beispielsweise schreiben:
let x = 5;
x = x + 3;
Stattdessen kann man Rechenoperatoren mit Zuweisung nutzen.
let x = 5;
x += 3;
| Zeichen | Beispiel | Langform | Info |
|---|---|---|---|
| += | x += 2 | x = x +2 | Der vorhandene Wert wird um einen bestimmten Wert erhöht. Aus 2 wird 4 |
| -= | x -= 2 | x=x-2 | Vom vorhandenen Wert wird ein bestimmter Wert subtrahiert. Aus 2 wird 0 |
| /= | x /= 2 | x=x/2 | Der vorhandene Wert wird durch einen bestimmten Wert dividiert. Aus 2 wird 1; |
| *= | x *= 2 | x=x*2 | Der vorhandene Wert wird mit einem bestimmten Wert multipliziert. Aus 2 wird 4; |
| %= | x %= 2 | x=x%2 | Der Rest der Division wird zugewiesen. Aus 2 wird 0; |
Zeichenketten kann man aneinanderreihen mit dem + Operator. Man nennt das Konkatenation.
let gruss= "Hallo ";
let name = "Willi";
let ausgabe = gruss + name;
ausgabe = gruss + name + " Hubert";
Beachten Sie, dass ein Leerzeichen auch ein Zeichen ist.
Auch Ausdrücke und Literale lassen sich mit Strings verknüpfen Mehr
dazu hier.
Beispiel
console.log("Das Ergebnis ist: " + (2*3));//Das Ergebnis ist 6
Desweiteren kann man den Zuweisungsoperator verwenden += um einen String um einen weiteren String oder Literal zu erweitern.
let name = 'Willi ';
name += 'Huber'; // 'Willi Huber'
Man kann mehrere boolsche Werte verknüpfen, um zu überprüfen, ob beide Werte true sind, oder nur einer von beiden. Außerdem kann man einen Wert in das Gegenteil umwandeln.
let a = true; let b = false; let c = a && b; // Ergebnis false
Das Ausrufezeichen ist ein unärer Operator er benötigt nur einen Wert.
let d = !true // Ergebnis false
| && | logisches Und | Beides muss erfüllt sein |
| || | oder | Eins von beiden muss erfüllt sein |
| ! | Negation, |
Verneinung aus true wird false, aus false wird true Es ist ein unärer Operator weil er sich nur auf einen Wert bezieht. |
Vergleichsoperatoren liefern true oder false und können in if-Strukturen eingesetzt
werden.
Weitere Vergleichsoperatoren(weitere Infos bei Selfhtml Vergleichsoperatoren)
| == | gleich |
| != | ungleich |
| > | größer als |
| < | kleiner als |
| >= | größer gleich |
| <= | kleiner gleich |
|
=== !== |
Gleichheit oder Ungleichheit können Sie nicht nur mit == bzw. !=, sondern auch mit === bzw. !==
abprüfen. In diesem Fall werden die Werte zusätzlich auf ihren Datenntyp hin
überprüft. |
In einer bedingten Anweisung kann man je nach Abfrageergebnis Anweisungen ausführen. Das macht man mit einer if-else-Struktur. Eine kürzere Schreibweise erreicht man mit dem ternären Auswahloperator. Er heißt ternärer Auwahloperator weil er sich auf 3 Operanden bezieht.
let alter = 14;
if(alter >= 18){
console.log("Herzlich willkommen.")
}else{
console.log("Eintritt erst ab 18.")
}
Es folgt die Alternative mit dem ternären Auswahloperator. Man beachte die Schreibweise mit Fragezeichen ? und Doppelpunkt :
let alter = 30;
(alter >= 18) ? console.log("Herzliche Willkommen") : console.log("Eintritt erst ab 18");
Bedingung ? True-Anweisung : Else-Anweisung;
|
Hiermit werden Binärzahlen um Stellen nach links oder rechts verschoben und mit Nullen aufgefüllt. Zum Beispiel die Zahl 42 hat die Binärzahl 101010 |
||
|
|
Dezimalzahl 42 | 101010 |
| zahl << 1 | 1 Stelle nach links entspricht einer Multiplikation mit 2. | 1010100 |
| zahl >>1; | 1 Stelle nach rechts entspricht teilen durch 2 (ganzzahlig) | 10101 |
| zahl << 2; | 2 Stellen entspricht multiplizieren mit 2 mal 2. | 10101000 |
|
|
3 Klammern bedeutet es wird auf jeden Fall mit Nullen aufgefüllt, bei größeren Zahlen könnte es ja auch sein, dass eine 1 folgt | 000101 |
|
Bitoperatoren verschieben nicht, sondern verknüpfen Bits direkt miteinander. Nehmen wir als Beispiel die
beiden Operanden a und b mit folgenden Werten |
||
|
10 |
Diese beiden Bit Operanden werden Stelle für Stelle verglichen. | 1010 1100 |
| a & b | Wenn beide Operanden an der gleichen Stelle eine 1 stehen haben erscheint eine 1. | 1000 |
| a | b | Bitweiser oder Operator. Es erscheint nur dann eine 0, wenn auf beiden Seiten an gleicher Stelle eine 0 steht. | 1110 |
| a^b | xor ein ausschließender Operator, wir erhalten eine 0 wenn auf beiden Seiten der gleiche Wert steht und eine 1 wenn auf beiden Seiten etwas verschiedenes steht. | 0110 |
|
|
Der Komplementäroperator wird nur auf einen Operanden angesetzt und dieser kehrt die Werte um. Eine 1 wird zur 0 und eine 0 zur 1 | 0101 |
Stell dir den Spread-Operator wie einen "Auspacker" vor. Er nimmt eine Sammlung (ein Array oder ein Objekt oder ein Set) und breitet deren Inhalte einzeln aus. Der Spread Operator und Rest-Operator besteht aus 3 Punkten ...
Früher musstest du mühsam verketten. Mit dem Spread-Operator "schüttest" du die Inhalte einfach in ein neues Array:
let land = ["Deutschland", "Italien"]; let stadt = ["Berlin", "Rom"]; let kombiniert = [...land, ...stadt]; // Ergebnis: ["Deutschland", "Italien", "Berlin", "Rom"]
Ein Set ist toll, um Duplikate zu löschen, aber es ist kein echtes Array (man kann z. B. nicht darauf sortieren).
Das ist extrem wichtig in der modernen Webentwicklung (z. B. React), um Daten nicht versehentlich zu überschreiben:
let user = { name: "Max", alter: 25 };
let userMitJob = { ...user, job: "Entwickler" };
// Erstellt ein NEUES Objekt, kopiert alle Eigenschaften von 'user' hinein und fügt 'job' hinzu.
Der Rest-Operator wird meistens dort benutzt, wo man Dinge entgegennimmt, zum Beispiel in Funktionsparametern oder beim Destructuring.Er besteht wie der Spread-Operator aus drei Punkten ...
siehe Funktionsparametern
Wenn du nicht weißt, wie viele Argumente ein User an deine Funktion übergibt, sammelst du den "Rest" einfach ein:
function teamBildung(...restPara){
return "Team: "+ restPara.join(", ");
}
teamBildung("Peter", "Yvette", "Jan");
console.log(teamBildung("Peter", "Yvette", "Jan"));
// Team: Peter, Yvette, Jan
siehe Destructuring
Du möchtest einen Teil auspacken und den verbleibenden Rest in einer eigenen Variable behalten:
let [direktor, chef, ...malocher] = ["Lars", "Nina", "Marc", "Julia", "Tom"]; console.log(direktor);// "Lars" console.log(chef);// "Nina" console.log(malocher);// ["Marc", "Julia", "Tom"]
Kurz gesagt: Der Spread-Operator nimmt die "Klammern" um die Daten weg und verteilt den Inhalt einzeln dort, wo du ihn gerade brauchst.
Der Spread- und der Rest-Operator sind zwei Seiten derselben Medaille. Sie benutzen beide die gleiche Syntax (...), machen aber genau das Gegenteil voneinander.
Um sie zu unterscheiden, hilft ein einfacher Merksatz:
Spread (Verteilen): Macht aus einem Paket viele Einzelteile.
Rest (Sammeln): Macht aus vielen Einzelteilen ein Paket.
Stell dir vor, du hast eine Schachtel und möchtest den Inhalt flach auf dem Tisch verteilen. Man verwendet es in:
Der Rest-Operator wird meistens dort benutzt, wo man Dinge entgegennimmt, zum Beispiel in Funktionen oder beim Des
| Operator | Wo steht er? | Was passiert? |
| Spread | Rechts vom = oder im Funktionsaufruf | Ein Array/Objekt wird in seine Einzelteile zerlegt. |
| Rest | Links vom = oder im Funktionskopf | Einzelne Werte werden zu einem Array/Objekt zusammengefasst. |
Der Operator ... passt sich seiner Umgebung an: