JavaScript für Ungeduldige. Cay Horstmann

Чтение книги онлайн.

Читать онлайн книгу JavaScript für Ungeduldige - Cay Horstmann страница 10

Автор:
Серия:
Издательство:
JavaScript für Ungeduldige - Cay Horstmann

Скачать книгу

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'

image

       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.

image

       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.

image

      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

image

      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'

image

      Vorsicht

      Wie Sie gesehen haben, ist der Ausdruck x + y eine Zahl, wenn beide Operanden Zahlen sind, und ein

Скачать книгу