Hinweis
Wenn der Integer-Bereich nicht ausreicht, können Sie auch große Integer mit einer beliebigen Anzahl von Stellen verwenden. Mehr darüber erfahren Sie in Kapitel 5.
Beim Rechnen mit Fließkommazahlen kann es wie in allen Programmiersprachen zu Rundungsfehlern kommen. Beispielsweise wird 0.1 + 0.2 wie in Java, C++ und Python zu 0.30000000000000004 ausgewertet. So etwas ist unvermeidlich, da es keine exakte binäre Darstellung für Dezimalbrüche wie 0.1, 0.2 und 0.3 gibt. Wenn Sie mit Euro- und Centbeträgen rechnen müssen, sollten Sie daher alle Werte als ganzzahlige Vielfache eines Cent angeben. In Kapitel 5 werden Sie noch weitere Formen von numerischen Literalen kennenlernen, z. B. Hexadezimalzahlen.
Um einen String in eine Zahl umzuwandeln, können Sie die Funktionen parseFloat und parseInt verwenden:
const notQuitePi = parseFloat('3.14') // Die Zahl 3.14
const evenLessPi = parseInt('3') // Der Integer 3
Mit der Methode toString dagegen konvertieren Sie eine Zahl in einen String:
const notQuitePiString = notQuitePi.toString() // Der String '3.14'
const evenLessPiString = (3).toString() // Der String '3'
Hinweis
Anders als in Java, aber ebenso wie in C++ gibt es in JavaScript sowohl Funktionen als auch Methoden. Bei den Funktionen parseFloat und parseInt handelt es sich nicht um Methoden. Deshalb werden sie nicht mit der Punktschreibweise aufgerufen.
Hinweis
Wie der vorige Code zeigt, ist es möglich, Methoden auf numerische Literale anzuwenden. Dabei müssen Sie die Literale jedoch in Klammern einschließen, damit der Punkt nicht fälschlicherweise als Dezimaltrennzeichen aufgefasst wird.
Vorsicht
Was geschieht, wenn Sie in einem Fall, in dem ein Integer erwartet wird, einen Dezimalbruch verwenden? Das hängt von der jeweiligen Situation ab. Nehmen wir an, Sie wollen aus einem String einen Teil-String entnehmen. Dabei werden Dezimalbrüche als Positionsangaben abgeschnitten, sodass sich der nächstkleinere Integer ergibt:
'Hello'.substring(0, 2.5) // Der String 'He'
Geben Sie aber einen Dezimalbruch als Index an, lautet das Ergebnis undefined:
'Hello'[2.5] // undefined
Es lohnt nicht, sich damit zu beschäftigen, wann ein Dezimalbruch anstelle eines Integers verwendet werden kann und wann nicht. Machen Sie in solchen Situationen deutlich, was Sie beabsichtigen, indem Sie ausdrücklich Math.trunc(x) oder Math.round.(x) aufrufen, um die Nachkommastellen abzuschneiden bzw. die Zahl auf den nächsten Integer zu runden.
Bei einer Division durch null lautet das Ergebnis Infinity oder -Infinity. Allerdings wird 0 / 0 zu NaN ausgewertet, der Konstante »not a number«. Manche Funktionen, die Zahlen generieren, geben NaN zurück, um auf eine fehlerhafte Eingabe hinzuweisen. Beispielsweise wird parseFloat('pie') zu NaN ausgewertet.
1.7Arithmetische Operatoren
JavaScript verfügt über die üblichen Operatoren +, -, * und / für Addition, Subtraktion, Multiplikation und Division. Beachten Sie, dass der Operator / stets eine Fließkommazahl ergibt, selbst wenn beide Operanden Integer sind. Beispielsweise ergibt 1 / 2 die Zahl 0.5 und nicht 0, wie es in Java oder C++ der Fall wäre.
Ebenso wie in Java, C++ und Python ergibt der Operator % den Rest der Division zweier nichtnegativer Integer-Operanden. Wenn k ein nichtnegativer Integer ist, wird k % 2 für ein gerades k zu 0 ausgewertet und für ein ungerades k zu 1.
Sind k und n positiv (und möglicherweise nicht ganzzahlig), dann ist k % n der Wert, der sich ergibt, wenn fortgesetzt n von k subtrahiert wird, bis das Ergebnis kleiner als n ist. Beispielsweise ergibt 3.5 % 1.2 den Wert 1.1, das Ergebnis der zweimaligen Subtraktion von 1.2. Was bei negativen Operanden geschieht, erfahren Sie in Übung 3.
Der Operator ** steht ebenso wie in Python (und schon in Fortran) für eine Potenzierung. Der Wert von 2 ** 10 ist 1024, der von 2 ** -1 ist 0.5 und der von 2 ** 0.5 die Quadratwurzel von 2.
Ist einer der Operanden eines arithmetischen Operators der »Not-a-Number-Wert« NaN, so ist das Ergebnis ebenfalls NaN.
Wie in Java, C++ und Python können Sie Zuweisungen und arithmetische Operationen kombinieren:
counter += 10 // Identisch mit counter = counter + 10
Die Operatoren ++ und -- inkrementieren bzw. dekrementieren eine Variable:
counter++ // Identisch mit counter = counter + 1
Vorsicht
Ebenso wie Java und C++ folgt auch JavaScript dem Beispiel von C und erlaubt es, den Operator ++ vor oder nach der Variable anzugeben, was den Prä- bzw. Post-Inkrementwert ergibt:
let counter = 0
let riddle = counter++
let enigma = ++counter
Welchen Wert haben riddle und enigma? Wenn Sie es nicht wissen, können Sie es herausfinden, indem Sie die vorige Beschreibungen genau lesen, den Code ausprobieren oder sich an den großen Quell des Wissens wenden, das Internet. Allerdings rate ich Ihnen dringend, niemals Code zu schreiben, für den Sie solche Kenntnisse benötigen.
Manche Programmierer halten die Operatoren ++ und -- für so verwerflich, dass sie sich weigern, diese zu benutzen. Es gibt auch keinen echten Grund dafür, denn schließlich ist counter += 1 nicht viel länger als counter++. In diesem Buch werde ich die Operatoren ++ und -- zwar verwenden, aber niemals in Zusammenhängen, in denen ihr Wert erfasst wird.
Wie in Java wird der Operator + auch zur String-Verkettung verwendet. Wenn s ein String ist und x ein Wert eines beliebigen Typs, dann sind sowohl s + x als auch x + s Strings, die dadurch zustande kommen, dass x in einen String umgewandelt und mit s verkettet wird.
Betrachten Sie dazu das folgende Beispiel:
let counter = 7
let agent = '00' + counter // Der String '007'
Vorsicht
Wie Sie gesehen haben, ist der Ausdruck x + y eine Zahl, wenn beide Operanden Zahlen sind, und ein String, wenn es sich bei mindestens einem Operanden um einen String handelt. In allen anderen Fällen sind die Regeln ziemlich kompliziert und die Ergebnisse nur selten sinnvoll. Entweder werden beide Operanden in Strings verwandelt und verkettet oder in Zahlen konvertiert und addiert. Beispielsweise wird der Ausdruck null + undefined zu der numerischen Addition 0 + NaN ausgewertet, die wiederum