JavaScript – M+T Pocket . Das Programmier-Handbuch (Office Einzeltitel) [Taschenbuch] (page 27)
6.6
Ausdrücke, Operatoren, Operanden und Wertzuweisungen
Ein Kernbegriff in der Programmierung ist Ausdruck, dessen einziges wichtiges Kennzeichen ist, dass er einen Wert besitzt oder
repräsentiert. Im einfachsten Fall besteht ein Ausdruck nur aus einem Literal
oder einer Variable. In diesem trivialen Fall ist der Wert des Ausdrucks identisch
mit dem Literal oder dem Wert der Variablen.
Es gibt aber auch zusammengesetzte Ausdrücke. In diesem Fall
werden Literale und/oder Variablen miteinander verknüpft, d.h. es wird eine
Berechnung (im weitesten Sinn) durchgeführt. Der Wert des Ausdrucks ist dann
das Ergebnis der Verknüpfung. Die Verknüpfung selbst erfolgt über so genannte
Operatoren. Dies sind besondere Zeichen oder Zeichenkombination, die eine
auszuführende Handlung mit einer oder mehreren Variablen oder konstanten Werten
(also Literalen) ausführen. Diese so verknüpften Elemente werden Operanden genannt. In der Regel werden Operatoren in verschiedene Kategorien eingeteilt.
6.6.1
Arithmetische Operatoren
Arithmetische Operatoren benutzen zwei numerische Operanden (Zahlen oder Variablen mit numerischem Inhalt)
und verbinden diese so, dass auf Grund der Verknüpfung ein neuer Wert
zurückgegeben wird. Es gibt in JavaScript folgende arithmetischen Operatoren:
Operator |
Beschreibung |
+ |
Additionsoperator |
– |
Subtraktionsoperator |
* |
Multiplikationsoperator |
/ |
Divisionsoperator |
% |
Modulooperator |
Tabelle 6.8: Die arithmetischen Operatoren von
JavaScript
Ein Beispiel zeigt die Operatoren im Einsatz.
<HTML>
<HEAD>
<SCRIPT
language="JavaScript">
document.write("1 + 1 = ", 1+1
+ "<br>");
document.write("2 * 2 = ", 2*2
+ "<br>");
document.write("4 / 3 = ", 4/3 +
"<br>");
document.write("Beachten Sie, was Division durch
0 ergibt: ", 5/0 + "<br>");
document.write("6 – 5 = ", 6-5
+ "<br>");
document.write("12 % 7 = ", 12
% 7 + "<br>");
document.write("123579 % 7532 =
", 123579 % 7532);
</SCRIPT>
</HEAD>
<BODY></BODY>
</HTML>
Listing 6.10: Verschiedene arithmetische
Operationen
Beachten Sie, dass bei arithmetischen Operationen, welche
mathematisch »unendlich« ergeben, ein wohldefinierter Wert Infinity
zurückgegeben wird. Diesen Wert kann man mit geeigneten JavaScript-Funktionen
sinnvoll nutzen.
414 268
/op1
6.17: Arithmetische Operationen
Einstellige arithmetische Operatoren sind Spezialfälle der
gerade genannten arithmetische Operatoren. Es gibt davon zwei. Sie verwenden
nur einem Operanden, der dem Operator nachgestellt wird und sind ziemlich
selbsterklärend. Der Operator
– ist die einstellige arithmetische Negierung, welche die
arithmetische Vorzeichenumdrehung ihres nachfolgenden numerischen Operanden
ergibt und der Operator + ist
nur aus Symmetriegründen vorhanden.
6.6.2 Zuweisungsoperatoren und Wertzuweisung
Was eine Wertzuweisung ist, ist bekannt (siehe Seite 104). Zuweisungsoperatoren sind die Grundlage jeder
solchen Wertzuweisung. Sie weisen das Ergebnis einer auf der rechten Seite
stehenden Operation (damit ist auch die einfache Notation eines konstanten
Werts gemeint) der linken Seite des Ausdrucks zu. In den meisten Fällen wird
dazu der direkte Zuweisungsoperators = verwendet, aber es gibt noch andere
Zuweisungsoperatoren. Bevor wir diese aber kennenlernen, wollen wir eine
Wertzuweisung besprechen, die Einsteigern[15]
immer wieder Kopfzerbrechen bereitet. Was bedeutet die folgende Zeile, wenn a eine Variable
ist?
a = a + 1;
Mathematisch gesehen kann das doch nicht stimmen, oder? Wenn
man entsprechend der mathematischen Logik die Variable a durch Zahlen ersetzt, würde das
1 = 2;
oder auch
42 = 43;
bedeuten. Der Denkfehler ist, dass die hier notieren Zeilen
keinen Vergleich (!) darstellen, sondern eben eine Wertzuweisung, die man auch
in zwei aufeinander folgende, logische Schritte zerlegen kann. Die Zeile
a = a + 1;
kann so zerlegt werden (mit zwei Variablen):
b = a + 1;
a = b;
Der Wert von a wird um den Wert 1 erhöht und dann der Variablen b zugewiesen. Dann
wird der Wert von b
genommen und a zugewiesen.
Neben dem normalen Zuweisungsoperator = gibt es in JavaScript die
arithmetischen Zuweisungsoperatoren. Es handelt sich nur um die verkürzte Schreibweise einer arithmetischen Zuweisung. Wie auch die
arithmetischen Operatoren, können sie sowohl mit ganzen Zahlen als auch mit
Fließkommazahlen verwendet werden. Es gibt folgende arithmetische
Zuweisungsoperatoren:
Operator |
Beschreibung |
+= |
Additions- Zuweisungsoperator |
-= |
Subtraktions-Zuweisungsoperator |
*= |
Multiplikations- Zuweisungsoperator |
/= |
Divisions- Zuweisungsoperator |
%= |
Modulo- Zuweisungsoperator |
Tabelle 6.9: Die arithmetischen
Zuweisungsoperatoren von JavaScript
Die Zuweisung a += 2; entspricht a = a + 2; und a *= 2; entspricht a = a * 2;.
<HTML>
<HEAD>
<SCRIPT
language="JavaScript">
var a=1;
document.write("Startwert: " +
a + "<BR>");
a +=7;
document.write("a +=7: " + a +
"<BR>");
a -=3;
document.write("a -=3: " +a +
"<BR>");
a *=6;
document.write("a *=6: " + a +
"<BR>");
a /=3;
document.write("a /=3: " + a +
"<BR>");
a %=4;
document.write("a %=4: " + a +
"<BR>");
</SCRIPT>
</HEAD>
<BODY></BODY>
</HTML>
Listing 6.11: Verschiedene arithmetische
Zuweisungsakionen
202 363
/op2
6.18: Arithmetische Zuweisungen
6.6.3
Inkrement-/Dekrement-Operatoren
In engem Bezug zu Wertzuweisungen stehen die sogenannten
Inkrement-/Dekrement-Operatoren. Diese werden zum Auf- und Abwerten eines
einzelnen Wertes verwendet. Inkrement- und Dekrement-Operatoren sind
einstellige Operatoren und werden nur in Verbindung mit einem ganzzahligen oder
einem Fließkommaoperanden benutzt. Der Inkrement-Operator ++ erhöht den Wert des Operanden um 1. Die Syntax ++zaehler;
entspricht zaehler =
zaehler + 1; oder auch zaehler+=1;. Es bedeutet also, dass der
Wert der voranstehenden Variablen um eins erhöht wird und dann der Variablen
wieder zugewiesen wird. Beachtet werden sollte, dass der Operator der Variablen
auch nachgestellt werden kann. Die Reihenfolge von Operand und Operator ist
dabei relevant! Wenn der Operator vor dem Operanden steht, erfolgt die Erhöhung
des Wertes, bevor der Wert dem Operanden zugewiesen wird. Wenn er hinter dem
Operanden steht, erfolgt die Erhöhung, nachdem der Wert bereits zugewiesen
wurde.
<HTML>
<HEAD>
<SCRIPT
language="JavaScript">
var a=1;
var b=1;
document.write(
"Wert von a: " + a + ". Wert von b:
" + b + ".<BR>");
document.write("Wert von ++a: " + ++a
+ ". Wert von b++: " + b++ +
".<BR>");
document.write("Wert von a: " + a + ".
Wert von b: "
+ b + ".<BR>");
</SCRIPT>
</HEAD>
<BODY></BODY>
</HTML>
Listing 6.12: Inkrement vor- und nachgestellt
397 235
/op3
6.19: Einmal wird erhöht und ausgegeben und
einmal ausgegeben und erst dann erhöht
Das Beispiel zeigt, dass eine Variable mit nachgestelltem
Operator erst ausgegeben wird und dann die Erhöhung erfolgt, während bei
vorangestelltem Operator die Erhöhung vor der Ausgabe durchgeführt wird.
Der Dekrementoperator — ist der Gegenspieler vom
Inkrement-Operator. Er erniedrigt den Wert des Operanden um 1. Ansonsten ist
alles identisch zum Inkrement-Operator. Die Reihenfolge von Operand und
Operator ist auch hier relevant. Wenn der Operator vor dem Operanden steht,
erfolgt die Erniedrigung des Wertes, bevor der Wert dem Operanden zugewiesen
wird. Wenn er hinter dem Operanden steht, erfolgt die Erniedrigung, nachdem der
Wert bereits zugewiesen wurde.
6.6.4
Vergleichsoperatoren
Vergleichsoperatoren gehören zu den wichtigsten Operatoren.
Sie verwenden zwei Operanden und vergleichen diese. JavaScript kennt die
nachfolgenden Vergleichsoperatoren:
Operator |
Beschreibung |
== |
Gleichheitsoperator |
!= |
Ungleichheitsoperator |
=== |
Strikter Gleichheitsoperator |
!== |
Strikter Ungleichheitsoperator |
< |
Kleiner-als-Operator |
> |
Größer-als-Operator |
<= |
Kleiner-als-oder-gleich-Operator |
>= |
Größer-als-oder-gleich-Operator |
Tabelle 6.10: Die Vergleichsoperatoren von
JavaScript
Die beiden strikten Operatoren (=== und !==) werden in früheren
JavaScript-Versionen nicht unterstützt. Die beiden Operatoren kontrollieren
nicht nur, ob Werte bei einem Vergleich übereinstimmen, sondern ob auch – im
Fall von Objekten – die Objekte vollkommen übereinstimmen. Das kleine Beispiel
zeigt die Unterschiede zu den normalen Vergleichsoperatoren.
<HTML>
<SCRIPT
language="JavaScript">
var testText = "Andrea";
var text2 = new String(testText);
if (testText==text2)
document.write("Werte
gleich");
if (testText===text2)
document.write("Vollkommen identisch");
</SCRIPT>
<BODY>
</BODY>
</HTML>
Listing 6.13: Unterschied von Gleichheit und
strikter Gleichheit
Zuerst wird eine Stringvariable mit einem Wert belegt. Dann
wird mit diesem String unter Verwendung von new und dem String-Konstruktor ein neues String-Objekt mit
gleichem Inhalt erzeugt. Der erste Vergleich zeigt, dass die Werte in beiden
Variablen identisch sind, der zweite jedoch, dass die Variablen nicht strikt
gleich sind. Die Wert werden in zwei verschiedenen Speicherbereichen abgelegt.
Vergleichsoperatoren werden in Verbindung mit
Kontrollflussanweisungen verwendet. Dort werden Sie mehr Beispiele finden (siehe Seite 117).
Beachten Sie, dass der Gleichheitsoperator == (zwei ohne Leerzeichen hintereinander |
Ein Spezialfall von Vergleichsoperatoren sind die logischen
Vergleichsoperatoren. Diese werden nur auf Boolesche (Wahrheits-) Operanden
angewandt. Meist (aber nicht immer) sind das Bedingungsüberprüfungen, deren
Ergebnisse logisch behandelt werden sollen. Etwa, wenn mehrere Bedingungen
verknüpft werden sollen. JavaScript kennt folgende logischen
Vergleichsoperatoren:
Operator |
Beschreibung |
&& |
Der logische AND-Operator. Er verbindet logische |
|| |
Der logische OR-Operator. Er verbindet logische |
! |
Der logische NOT-Operator. Er dreht einen Wahrheitswert |
Tabelle 6.11: Die logischen Vergleichsoperatoren
von JavaScript
Für Beispiele mit AND und OR siehe
Seite 119. Hier folgt ein Beispiel mit
dem logischen Nicht-Operator.
<HTML>
<HEAD>
<SCRIPT
language="JavaScript">
var a = false
document.write("Wert von a:
" + a + "<br>");
document.write("Wert von !a:
" + !a);
</SCRIPT>
</HEAD>
<BODY></BODY>
</HTML>
Listing 6.14: Wirkung vom logischen Nicht-Operator
393 233
/op4
6.20: Der Wahrheitswert der Variablen wird
umgedreht
6.6.5
Der konditionale und der typeof-Operator
Unter dem konditionalen bzw. if-else-Operator
versteht man die Kombination der beiden Zeichen Fragezeichen und Doppelpunkt ? :. Der
Doppeloperator arbeitet mit drei Operanden. Die Operation benötigt einen
Booleschen Ausdruck vor dem Fragezeichen. Wenn er wahr liefert, wird der Wert
vor dem Doppelpunkt zurückgegeben, ansonsten der Wert hinter dem Doppelpunkt.
Der Operator ist eine Kurzschreibweise für ein if-else-Konstrukt, das bei den
Kontrollfluss-Anweisungen (siehe Seite 117) intensiver behandelt wird. Dort finden Sie auch
ein Beispiel (siehe Seite 121).
Der in jeder Hinsicht außergewöhnliche Operator typeof ist ein unitärer Operator, den den Datentyp des nachgestellten Operanden in Form einer
Zeichenkette zurückliefert. Dabei kann
number,
•
boolean,
•
string,
•
undefined,
function
oder
object
als Ergebnis angegeben werden.
<HTML>
<BODY>
<SCRIPT
language="JavaScript">
var a = 2;
var b = true;
var c = new Date();
var d;
var e = "Felix";
var f = 3.14;
function test() {
return 1;
}
document.write("Wert von a: " + a + ".
Datentyp: "
+ typeof a + ".<br>")
document.write("Wert von b: " + b + ".
Datentyp: "
+ typeof b + ".<br>")
document.write("Wert von c: " + c + ".
Datentyp: "
+ typeof c + ".<br>")
document.write("Wert von d: " + d + ".
Datentyp: "
+ typeof d + ".<br>")
document.write("Wert von e: " + e + ".
Datentyp: "
+ typeof e + ".<br>")
document.write("Wert von f: " + f + ". Datentyp: "
+ typeof f + ".<br>")
document.write("Wert von test():
" + test()
+ ". Datentyp: " + typeof
test() + ".<br>")
document.write("Wert von test:
" + test
+ ". Datentyp: " + typeof
test + ".<br>")
</SCRIPT>
</BODY>
</HTML>
Listing 6.15:Typ der Variablen
Beachten Sie in dem Beispiel insbesondere die letzten beiden
Ausgaben. Dort wird einmal die Funktion mit Klammern und einmal ohne Klammern
verwendet. Der Typ mit Klammern ist derjenige des Rückgabewerts, der ohne
Klammern ist function.
401 274
/op6
6.21: Wert und Datentyp gegenübergestellt
Der typeof-Operator
kann gut dazu genutzt werden, zu testen, ob eine Variable überhaupt definiert
wurde. Wenn man den Wert undefined
bei einem Test erhält, ist ihr entweder noch kein Wert zugewiesen oder aber es
gibt sie noch gar nicht.
6.6.6
Bitweise Operatoren
Die bitweisen Operatoren wollen wir hauptsächlich der
Vollständigkeit angeben. Sie sind recht kompliziert und werden nicht oft in
Scriptsprachen eingesetzt. Dennoch – JavaScript stellt wie viele andere
mächtige Programmiersprachen Operatoren zur Verfügung, die auf Ebene der Bits
arbeiten. Beispielsweise bitweise arithmetische Operatoren, welche direkt
Bitwerte verändern. Oder bitweise Verschiebungsoperatoren, welche die Bits in
der binären Darstellung eines Zeichens verschieben. Die Bits des ersten
Operanden werden um die Anzahl an Positionen verschoben, die im zweiten
Operanden angegeben wird. Im Fall der Verschiebung nach links ist es immer eine
Null, mit der die rechte Seite aufgefüllt wird. Dieser Vorgang entspricht dem
Multiplizieren mit 2
hoch der Zahl, die durch den zweiten Operanden definiert wird. Der normale
Verschiebungsoperator nach rechts vervielfacht das Vorzeichenbit. Dieser
Vorgang entspricht der Division durch 2 hoch der Zahl, die durch den zweiten
Operanden definiert wird. Die Verschiebung nach rechts mit Füllnullen
vervielfacht eine Null von der linken Seite.
Operator |
Beschreibung |
& |
Bitweiser AND-Operator |
| |
Bitweiser OR-Operator |
^ |
Bitweiser XOR-Operator |
~ |
Bitweiser Komplement-Operator |
<< |
Bitweise Verschiebung nach links. |
>> |
Bitweise Verschiebung nach rechts. |
>>> |
Bitweise Verschiebung nach rechts mit Füllnullen. |
Tabelle 6.12: Bitweise Operatoren
Der bitweiser Komplement-Operator unterscheidet sich massiv
von den anderen genannten bitweisen Operatoren, denn Komplementieren ist eine
einstellige bitweise Operation mit nachgestelltem Operanden (im Gegensatz zu
den anderen Operationen, welche zweistellig sind). Wenn ein Byte komplementiert
wird, werden alle seine Bits invertiert.
JavaScript kennt auch bitweise Zuweisungsoperatoren und
bitweise Vergleichsoperatoren. Bitweise Zuweisungsoperatoren führen wie normale
Zuweisungsoperatoren Zuweisungen mit – jetzt bitweise zu verstehenden –
Operationen durch. Bitweise Zuweisungsoperatoren verwenden einen Wert, führen
eine entsprechende bitweise Operation mit dem zweiten Operanden durch und legen
das Ergebnis als Inhalt des ersten Operanden ab.
Bitweise Vergleichsoperatoren vergleichen binär zwei
Operanden.
Operator |
Beschreibung |
&= |
Bitweise AND-Zuweisung. |
|= |
Bitweise OR-Zuweisung. |
^= |
Bitweise XOR-Zuweisung. |
<<= |
Bitweise Verschiebungszuweisung nach links. |
>>= |
Bitweise Verschiebungszuweisung nach rechts. |
>>>= |
Bitweise Verschiebungszuweisung nach rechts mit |
Tabelle 6.13: Bitweise Zuweisung und Vergleich
6.6.7
Operatoren-Prioritäten
Operatoren in JavaScript haben eine festgelegte Rangordnung,
die immer dann angewandt wird, wenn mehrere Operatoren in einer Anweisung
verwendet werden. Die Prioritäten der JavaScript-Operatoren sind in der
nachfolgenden Tabelle von der höchsten Wertigkeit bis zur niedrigsten abwärts
angegeben. Bei gleicher Wertigkeit von Operatoren in einer Anweisungszeile
(etwa bei Vergleichsoperatoren) erfolgt die Bewertung von links nach rechts.
Beachten Sie, dass Klammern die höchste Priorität haben und Sie deshalb mit
Klammernsetzen alle andere Prioritäten aufheben können. Zuweisungen haben
(außer der Aufzählung mit Kommata) die niedrigste Priorität, was nichts anderes
bedeutet, als dass ein Ausdruck auf der rechten Seite einer Zuweisung immer
erst vollständig ausgewertet wird, bevor die Zuweisung erfolgt.
Priorität |
Operatoren |
1 |
() [] |
2 |
! ~ – ++ — typeof |
3 |
* / % |
4 |
+ – |
5 |
<< >> >>> |
6 |
< <= > >= |
7 |
== != === !== |
8 |
& |
9 |
^ |
10 |
| |
11 |
&& |
12 |
|| |
13 |
?: |
14 |
= += -= <<= >>= &= ^= |= |
15 |
, |
Tabelle 6.14: Rangordnung von
JavaScript-Operatoren