JavaScript/Objekte/Number

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Unter dem Begriff Number versteht man in JavaScript dreierlei - zum einen den primitiven Datentyp für Zahlenwerte, zum zweiten eine Funktion, die beliebige Werte in Zahlenwerte konvertiert und zum dritten ein vordefiniertes Objekt, das dazu da ist, Zahlenwerte als Objekt zu kapseln. Diese Bedeutungen müssen genau unterschieden werden.

Der JavaScript-Programmierer verwendet im Normalfall immer den primitiven Datentyp. Das Number-Objekt existiert in JavaScript als Helfer, um Zahlenwerte bei Bedarf wie Objekte behandeln zu können. Eine Beschreibung dazu findet sich weiter unten.

Da dieser Artikel auch unter dem Thema Datentypen verlinkt ist, soll auch auf Zahlenwerte in JavaScript eingegangen werden.

[Bearbeiten] Das Number Objekt

Über das Objekt Number haben Sie Zugriff auf Eigenschaften numerischer Werte. So können Sie ermitteln, ob ein Wert eine gültige Zahl darstellt oder welches die maximale positive oder negative Zahl ist, die in einer numerischen Variablen gespeichert werden kann. Eigenschaften des Number-Objekts können Sie direkt ansprechen, indem Sie Number davor notieren.

Globale Funktionen zum Umwandeln von Werten in Zahlenwerte

Number() als Funktion konvertiert beliebige Werte in primitive numerische Werte. Sofern man einen primitiven Wert übergibt, greifen einige Standardregeln:

  • Number(undefined) ergibt NaN
  • Number(null) ergibt 0
  • Number(false) ergibt 0
  • Number(true) ergibt 1
  • Number(string) fasst den String als Literal eines Zahlenwertes auf (siehe unten), wobei es nicht festgelegt ist, ob eine führende Null zu einer Interpretation als Oktalzahl führt. Das Problem der möglichen Oktalzahl lässt sich besser mit parseInt() behandeln.

Es ist grundsätzlich möglich, mit new Number(wert) ein Number-Objekt explizit anzulegen. Solche Objekte verhalten sich in arithmetischen Ausdrücken wie Zahlen, weil JavaScript implizit durch Aufruf der valueOf() Methode den primitiven Wert herausholt. Dieses Vorgehen ist nicht zu empfehlen. Es führt in den meisten Fällen nur zu einer langsameren Programmausführung, und im Fall von new Number(0) auch zu Irritiationen, weil der primitive Wert 0 falsy ist (siehe Boolean, das Number-Objekt, das 0 enthält, dagegen truthy. JavaScript erkennt automatisch, wenn für einen primitiven numerischen Wert ein Aufruf einer Number-Methode stattfinden soll, und erzeugt dann für die Dauer dieses Aufrufs ein temporäres Number-Objekt.

[Bearbeiten] Zahlenwerte

Zahlenwerte können in JavaScript auf unterschiedliche Art notiert werden. Es gibt

  • Ganze Zahlen (integer) im üblichen Zehnersystem, notiert als eine Ziffernfolge. Für negative Zahlen stellt man ein Minuszeichen voran.
  • Ganze Zahlen als Hexadezimalzahl, notiert durch ein Präfix 0x und eine Folge aus Hexadezimalziffern 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f. Statt der Kleinbuchstaben können auch Großbuchstaben verwendet werden.
  • Ganze Zahlen als Oktalzahl, notiert durch eine 0 als erste Ziffer und eine Folge aus Oktalziffern 0,1,2,3,4,5,6,7. Diese Darstellung wird nicht von allen JavaScript-Interpretern unterstützt, es ist daher ratsam, auf Oktalzahlen ganz zu verzichten. Es gibt noch einige Bereiche, wo sie genutzt werden, dazu mehr in der Wikipedia
  • Fließkommazahlen (float), notiert als eine Folge aus Ziffern mit einem Punkt dazwischen, der die Rolle des Dezimalkommas übernimmt. Auch hier ist ein vorangestelltes Minuszeichen möglich
  • Exponentialzahlen, notiert als Fließkommazahl mit einem angefügten Exponententeil, bestehend aus einem e oder E, einem optionalen Minuszeichen für negative Exponenten und dem Wert des Exponenten. Die Fließkommazahl vor dem e wird durch den Exponententeil mit 10 hoch (exponentenwert) multipliziert.
Beispiel: Schreibweise von Literalen für numerischer Werte
var i1 = 0,                // Integer-Werte
    i2 = 4711,
    i3 = -1000000;
var h1 = 0x0,              // Hexadezimale Werte
    h2 = 0xdeadbeef,
    h3 = -0x1234;
var o1 = 0111;             // Ein Oktalwert, entspricht dezimal 73
var f1 = 1.234,
    f2 = -47.11,
    f3 = 1E100,            // Ein Googol
    f4 = 31415.926E-4;     // Pi in Verkleidung

Fließkommazahlen werden intern auf eine Stelle vor dem Komma standardisiert, würde man f4 ausgeben, wäre das Ergebnis "3.1415926".

Trotz dieser unterschiedlichen Schreibmöglichkeiten wird jeder numerische Wert von Javascript als Fließkommazahl mit Exponent gespeichert. Das ermöglicht die fehlerfreie Darstellung von integer-Werten im Zahlenbereich von JavaScript unterscheidet nicht zwischen unterschiedlichen Arten von Zahlen. Sie werden immer als eine 64-bit Fließkommazahl nach IEEE 754 gespeichert. Dadurch können ganze Zahlen im Bereich von -9007199254740992 bis +9007199254740992 exakt dargestellt werden (2 hoch 53). Insgesamt sind Zahlenbeträge bis 1.7976931348623157 E+308 darstellbar. Die kleinste nicht negative Zahl, die nach IEEE 754 gespeichert werden kann, ist 5E-324.

Das Problem bei Fließkommazahlen ist, dass sie in den meisten Fällen einen gerundeten Wert darstellen, und dass die Anzahl der signifikanten Ziffern auf ca. 16 begrenzt ist (52 Binärstellen). Das führt zu gewissen Anomalien beim Anwenden mathematischer Formeln. Der Wert 0.1 ist im IEEE 754 Format eine periodische Binärzahl, die nur gerundet speicherbar ist. Deswegen ergibt der Vergleich 100.1 - 100 == 0.1 das Ergebnis false. Das ist kein Fehler von JavaScript, sondern eine Eigenschaft von Fließkommazahlen, die in das IEEE 754 Format eingebaut ist. Es gibt unterschiedliche Strategien, damit umzugehen; deren Darstellung würde dieses Wiki jedoch sprengen.

Meine Werkzeuge
Namensräume

Varianten
Aktionen
Übersicht
Schnell‑Index
Mitmachen
Werkzeuge
Spenden
SELFHTML