4.2 Operatoren  
Durch Operatoren wird eine gewisse Anzahl von Variablen miteinander kombiniert. Beispiele für Operatoren sind die Grundrechenarten. Durch den Plus-Operator werden zwei Zahlen miteinander kombiniert, und als Ergebnis erhält man die Summe dieser beiden Zahlen. Man unterscheidet – auch je nach Typ der beteiligten Variablen – verschiedene Arten von Operatoren.
4.2.1 Arithmetische Operatoren  
Diese Art von Operatoren arbeitet mit numerischen Variablen. Sie sollten also sicherstellen, dass auch wirklich Zahlenvariablen vorliegen, sonst könnten Sie eine Fehlermeldung erhalten. In Abschnitt 9.7 finden Sie Techniken, wie man Zahlenvariablen als solche erkennen kann. Die folgende Tabelle zeigt alle arithmetischen Operatoren anhand eines Beispiels.1
Tabelle 4.2 Arithmetische Operatoren
Operator
|
Beschreibung
|
Beispiel
|
Ergebnis (Wert von a)
|
+
|
Addition
|
a = 7 + 4
|
11
|
-
|
Substraktion
|
a = 7 – 4
|
3
|
*
|
Multiplikation
|
a = 7 * 4
|
28
|
/
|
Division
|
a = 7 / 4
|
1.75
|
%
|
Modulo (Restrechnung)1
|
a = 7 % 4
|
3
|
-
|
Negation
|
b = 7
a = –b
|
–7
|
Will man eine Variable um einen bestimmten Wert erhöhen, kann man sich des folgenden Konstrukts bedienen:
AnzahlAuflagen = AnzahlAuflagen + 1;
Der Variablen AnzahlAuflagen wird als Wert der alte Wert dieser Variablen plus fünf zugewiesen. Der Wert der Variablen wird also de facto um eins erhöht. In der Praxis kommt es sehr häufig vor, dass der Wert einer Variablen um genau eins erhöht oder verringert werden soll; für diesen Fall sieht JavaScript eine Abkürzung vor:
|
AnzahlAuflagen++ erhöht den Wert der Variablen um eins. |
|
AnzahlAuflagen-- verringert den Wert der Variablen um eins (etwa, wenn eine Auflage eingestampft werden müsste?!). |
Die Operatoren ++ und -- können auch direkt vor dem Variablennamen stehen. Der Unterschied liegt in der Reihenfolge, in der diese Operation im Vergleich mit anderen Operationen ausgeführt werden soll. Am Beispiel des Operators ++ soll das einmal durchexerziert werden; -- verhält sich analog.
Das Endergebnis des Standalone-Ausdrucks (des »alleinstehenden« Ausdrucks)
AnzahlAuflagen++;
hat zunächst denselben Effekt (nämlich: Erhöhung um 1) wie
++AnzahlAuflagen;
Einen Unterschied stellt man jedoch fest, wenn der Ausdruck bei einer Zuweisung verwendet wird:
var Auflagen = 7;
var Anzahl = ++AnzahlAuflagen;
var Anzahl2 = AnzahlAuflagen++;
Welchen Wert hat Anzahl, welchen Wert hat Anzahl2?
Die (vielleicht etwas überraschende) Antwort lautet: Anzahl hat den Wert 8, Anzahl2 hat auch den Wert 8. Betrachten Sie zunächst die zweite Zeile:
var Anzahl = ++AnzahlAuflagen;
Der ++-Operator steht vor dem Variablennamen. Das bedeutet hier, dass zunächst diese Operation (AnzahlAuflagen um eins erhöhen) ausgeführt und dann der neue Wert (8) der Variablen Anzahl zugewiesen wird.
Bei der dritten Zeile ist es genau andersherum:
var Anzahl2 = AnzahlAuflagen++;
Zuerst wird der Variablen Anzahl2 der (aktuelle) Wert von AnzahlAuflagen zugewiesen, dann wird der Wert von AnzahlAuflagen um eins vergrößert.
Wenn man den Wert einer Variablen nicht um exakt eins erhöhen oder verringern will, kann man sich einer anderen Abkürzung bedienen. Diese Abkürzung existiert für jede der vier Grundrechenarten sowie für den Modulo-Operator:
Tabelle 4.3 Abkürzungen für arithmetische Operationen
Operator
|
Bedeutung
|
Langform
|
Kurzform
|
+=
|
Addition
|
a = a + b
|
a += b
|
–=
|
Subtraktion
|
a = a – b
|
a –= b
|
*=
|
Multiplikation
|
a = a * b
|
a *= b
|
/=
|
Division
|
a = a / b
|
a /= b
|
%=
|
Modulo
|
a = a % b
|
a %= b
|
Auch in JavaScript gilt: Punktrechnung geht vor Strichrechnung. Multiplikationen und Divisionen werden also vor Additionen und Subtraktionen ausgeführt. Der folgende Ausdruck liefert daher 7 und nicht 9:
var PunktVorStrich = 1 + 2 * 3;
4.2.2 Boolesche Operatoren  
Mit Logikoperatoren (oder booleschen Operatoren) kann man Wahrheitswerte miteinander verknüpfen. Die Bedeutung der Operatoren ist die mathematische Bedeutung, nicht unbedingt die umgangssprachliche Bedeutung. Aus diesem Grund werden die einzelnen Operatoren hier explizit vorgestellt.
Nur, wenn beide (bzw. alle) beteiligten Variablen den Wert true haben, liefert die Operation true zurück, ansonsten false.
var t = true;
var f = false;
var bool1 = t && f; //liefert false
var bool2 = t && t; //liefert true
Ist eine der beteiligten Variablen true, so liefert die Operation true zurück. Das Ergebnis ist nur dann false, wenn alle Variablen den Wert false haben. Hier liegt ein Unterschied zum Deutschen vor, denn dort bedeutet »oder« eher »entweder-oder«: Das Ergebnis ist nur dann true, wenn genau eine der beteiligten Variablen den Wert true hat.
var t = true;
var f1 = false;
var f2 = false;
var bool1 = t || f1 || f2; //liefert true
var bool2 = f1 || f2; //liefert false
Der Negationsoperator macht true zu false und false zu true.
var t = true;
var f = false;
var bool1 = !t; //liefert false
var bool2 = !f; //liefert true
Wie Sie bereits gesehen haben, genügt genau eine Variable mit dem Wert true, damit das Ergebnis einer Oder-Verknüpfung ganz sicher den Wert true hat. Analog liefert eine Und-Verknüpfung auf jeden Fall den Wert false, wenn eine Variable den Wert false hat.
JavaScript – zumindest die existierenden Implementierungen – benutzt hier das Prinzip der so genannten Short Evaluation (wörtlich: kurze Auswertung). Bei einer Und- bzw. Oder-Verknüpfung werden die beteiligten Variablen von links nach rechts durchgegangen. Sollte bei einer dieser Variablen aufgrund ihres Werts das Ergebnis der gesamten Operation schon feststehen, wird der Rest nicht weiter ausgewertet.
Hier ein Beispiel:
var f = false;
var bool = f && andereVariable;
Auf andereVariable wird hier gar nicht erst zugegriffen: Die Variable f ist false, damit kann die &&-Verknüpfung (logisches Und) nur false als Ergebnis haben.
Vergleichsoperatoren werden meistens bei Zahlenwerten verwendet. Auch bei Zeichenketten sind diese Vergleiche möglich. Hier richtet sich die Rangfolge der einzelnen Zeichen (welches Zeichen ist »größer« als ein anderes?) nach dem ASCII-Code des Zeichens.
Tabelle 4.4 Vergleichsoperatoren
Operator
|
Beschreibung
|
Beispiel
|
Ergebnis (Wert für a)
|
==
|
Gleich
|
a = (3 == 4)
a = ("Java" == "JavaScript")
|
false
|
!=
|
Ungleich
|
a = (3 != 4)
a = ("Java" != "JavaScript")
|
true
|
>
|
Größer als
|
a = ( 3 > 4)
|
false
|
<
|
Kleiner als
|
a = (3 < 4 )
|
true
|
>=
|
Größer oder gleich
|
a = ( 3 >= 4)
|
false
|
<=
|
Kleiner oder gleich
|
a = (3 <= 4 )
|
true
|
Eine häufige Fehlerquelle ist die Verwechslung der Zuweisung = mit dem Vergleichsoperator ==. Ab JavaScript Version 1.3 gibt der Interpreter eine Fehlermeldung aus, wenn offensichtlich ein Vergleich durchgeführt werden soll, aber der Zuweisungsoperator verwendet wird.
4.2.3 String-Operatoren  
Auch mit Zeichenketten kann man »rechnen«; man kann zwei Zeichenketten aneinander hängen. Hierzu wird ebenfalls der Plus-Operator (+) verwendet:
var vorne = "Galileo";
var hinten = "Press";
var Verlag = vorne + " " + hinten; //liefert "Galileo Press"
Ansonsten kann man mit Zeichenketten nicht rechnen. Dennoch sollen an dieser Stelle noch drei Möglichkeiten vorgestellt werden, um mit Zeichenketten etwas anzufangen:
|
Zeichenkette.length: Liefert die Anzahl der Zeichen in einer Zeichenkette zurück. |
|
Zeichenkette.charAt(x): Liefert das Zeichen an der Position x in der Zeichenkette zurück. Dabei beginnt die Zählung bei 0, das vierte Zeichen erhält man also mit Zeichenkette.charAt(3). |
|
Zeichenkette.substring(start, ende): Liefert eine Teilzeichenkette zurück, und zwar ab dem Zeichen an der Position start (die Zählung beginnt wieder bei 0) und bis zu dem Zeichen vor dem Zeichen an der Position ende. |
Hierzu ein kleines Beispiel. In den Variablen a und b stehen das erste Zeichen der Zeichenkette und die folgenden Zeichen:
var z = "Galileo press";
var a = z.charAt(0); //a == "G"
var b = z.substring(1, z.length); //b == "alileo Press"
4.2.4 Umwandlung zwischen den Variablentypen  
Die vorgestellten Operatoren können auch dazu verwendet werden, Umwandlungen zwischen den einzelnen Variablentypen durchzuführen. JavaScript ist in Sachen Variablentypus nicht so strikt wie andere Programmiersprachen. Eine Variable kann auch ihren Typ während des Programmablaufs ändern. Beispielsweise werden Sie in einem späteren Kapitel feststellen, dass Formulareingaben stets als Zeichenketten vorliegen. Wenn Sie sich aber sicher sind, dass die Zeichenkette eine korrekt formatierte Zahl enthält, können Sie JavaScript dazu zwingen, die Variable als Zahlenwert zu betrachten. Der Trick besteht darin, die Variable mit eins zu multiplizieren (oder 0 zu addieren). Eine Multiplikation kann nur mit Zahlenwerten durchgeführt werden, so dass JavaScript die Variable in eine Zahl umwandelt – und eine Multiplikation mit eins ändert am Wert der Zahl auch nichts.
Außerdem ist es manchmal notwendig, eine boolesche oder eine numerische Variable in eine Zeichenkette umzuwandeln. Diesmal muss der Konkatenationsoperator (Verkettungsoperator), das Plus, verwendet werden. Indem eine Variable mit einer leeren Zeichenkette konkateniert (verkettet) wird, erhält man als Ergebnis eine Zeichenkette, ändert aber ansonsten den Wert der Variablen nicht.
var AnzahlAuflagen = "7";
AnzahlAuflagen *= 1; //Zeichenkette in Zahl
var wahrheitswert = true;
wahrheitswert += ""; //Wahrheitswert in Zeichenkette
var Anzahl = 8;
Anzahl += ""; //Zahl in Zeichenkette
JavaScript führt zwar eine automatische Typenkonvertierung durch, aber nicht immer in die gewünschte Richtung:
var siebenundvierzig = "47";
var summe = siebenundvierzig + 11; // "4711", nicht 58
JavaScript stellt auch ein paar Funktionen zur Verfügung, um Umwandlungen durchzuführen. Durch parseInt() wird eine Zeichenkette in eine (ganzzahlige) Zahl umgewandelt, durch parseFloat() in eine Fließkommazahl. Innerhalb der runden Klammern wird die Zeichenkette angegeben:
var zahl1 = parseInt("47"); //liefert 47 als Zahl
var zahl2 = parseInt("47.11"); //liefert 47,11 dezimal
Hierauf gehen wir an späterer Stelle noch einmal en detail ein.
|