Numbers

Ein Zahlenwert besteht aus einer beliebigen Reihe numerischer Zeichen. Beispiele:

5

Der Zahlendatentyp enthält auch einige spezielle globale Attribute, die numerische Konzepte darstellen, z. B. Infinity und NaN – ein Wert, der "keine Zahl" bedeutet und ein potenzielles Ergebnis des Versuchs ist, mathematische Berechnungen für Nicht-Zahlenwerte durchzuführen.

Zahlenobjekt

Wenn ein Wert an die Number()-Funktion übergeben wird, wird dieser Wert in das entsprechende Zahlenäquivalent umgewandelt. Ein numerischer String führt beispielsweise zu einem äquivalenten Zahlenprimitive:

Number( "10" );
> 10

Wenn Sie einen false- oder null-Wert an Number() übergeben, wird 0 zurückgegeben und true gibt 1 zurück.

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

Wenn ein Wert nicht konvertiert werden kann, wie im Fall von undefined oder einem String mit nicht numerischen Zeichen, gibt die Number-Funktion NaN zurück:

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

Wie unter prototypisierte Übernahme beschrieben, gibt es wahrscheinlich wenig bis gar keinen Grund, das Number-Objekt als Konstruktor zu verwenden, da damit ein Number-Objekt anstelle eines Zahlenliterals erstellt wird.

let numObject = new Number( 15 );

numObject;
> Number { 15 }

Dieses Objekt verhält sich wie sein zugewiesener Wert für mathematische Operationen, scheitert jedoch strenge Gleichheitsvergleiche mit Zahlenliteralen, da die Datentypen nicht übereinstimmen. Dies hat keinen praktischen Nutzen gegenüber einem Literalwert.

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

Gleitkommazahlen und Ganzzahlen

JavaScript hat nur einen Zahlentyp: 64-Bit-IEEE 754-1985-Gleitkommazahlen mit doppelter Genauigkeit zwischen -2^1024 und 2^1024. Bevor JavaScript eine Zahl im Speicher speichert, wandelt es diese Zahl zuerst in eine binäre Gleitkommazahl um, die auch als float bezeichnet wird.

Diese 64-Bit-Speicherung (ein positives oder negatives "Vorzeichen"-Bit, 11 Bits für einen Exponenten und 52 Bits für einen Bruch) kann zu Genauigkeitsfehlern mit einer beliebigen Anzahl von Ziffern führen, die nicht in einen zulässigen Bereich passen. Diese Einschränkung hängt mit dem JavaScript-Datentyp „Zahl“ zusammen.

0.1 + 0.7
> 0.7999999999999999

Ein Zahlenwert kann stattdessen als Ganzzahl gespeichert werden, also als Gleitkommazahl ohne Bruch zwischen -(2^53 − 1) und 2^53 − 1. Da Gleitkommazahlen und Ganzzahlen auf die gleiche Art und Weise gespeichert werden, gibt es keinen praktischen Unterschied in der Funktionsweise dieser Zahlen. Wir empfehlen jedoch, nach Möglichkeit ganze Zahlen zu verwenden, um Genauigkeitsfehler zu vermeiden.

Zahlenoperatoren

Wenn Sie mathematische Standardoperatoren mit Zahlenprimitiven verwenden, gilt die mathematische Reihenfolge von Operationen: Alle Ausdrücke in Klammern werden zuerst ausgewertet, gefolgt von Exponenten, Multiplikation, Division, Addition und Subtraktion.

Operator Name Beschreibung Nutzung Ergebnis
+ Ergänzung 2+2 4
- Subtraktion 4-2 2
* Multiplikation 2*5 10
/ Abteilung 10/5 2
++ Inkrement-Zeichen Fügt eins zu einer Zahl hinzu 2++ 3
-- Verringern Subtrahiert eins von einer Zahl 3-- 2
** Exponent Gibt das Ergebnis der Potenzierung des ersten
-Operanden auf die Potenz des zweiten Operanden zurück.
2**4 16
% Restwert Gibt den Rest zurück, der übrig bleibt, wenn der erste Operand
durch den zweiten Operanden geteilt wird.
12%5 2

Sie können auch mathematische Zuweisungsoperatoren verwenden, um eine mathematische Operation mit dem Wert einer Variablen auszuführen und den neu berechneten Wert sofort der Variablen zuzuweisen.

Operator Name Nutzung
+= Zuweisung zum Hinzufügen myValue += 2
-= Zuweisung zum Entfernen myValue -= 2
*= Multiplikationszuweisung myValue *= 2
/= Zuweisung von Abteilungen myValue /= 2
**= Exponentenzuweisung myValue **= 2
%= Verbleibende Zuweisung myValue %= 2

Symbolische Werte

Das Zahlenprivileg gilt auch für einige Sonderfälle: den Wert "keine Zahl" (NaN) und einen Wert, der unendlich ist und entweder positiv (Infinity) oder negativ (-Infinity) sein kann.

Das Auftreten von Infinity kann selten auftreten, wenn eine Division durch null erfolgt. In diesem Fall geben die meisten Programmiersprachen stattdessen einen Fehler aus:

10 / 0
> Infinity

Denken Sie daran, dass bei JavaScript zwischen Groß- und Kleinschreibung unterschieden wird. Infinity ist ein Zahlendatentyp, der das Konzept der Unendlichkeit darstellt, infinity hat aber keine besondere Bedeutung:

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

NaN (Not a Number) wird häufiger angezeigt, wenn das Ergebnis einer arithmetischen Operation nicht als Zahl ausgedrückt werden kann. Da JavaScript beispielsweise versucht, den Datentyp aus Wert und Kontext abzuleiten, kann ein Stringliteral, das nur eine Zahl enthält, in einer mathematischen Operation verwendet werden:

"2" * 2;
> 4

Wenn dieser String jedoch nicht als Zahlenwert geparst werden kann, führt die mathematische Operation zu einer Nicht-Zahl:

"two" * 2;
> NaN

NaN wird zurückgegeben, wenn ein ungültiger Wert in einer mathematischen Operation als Zahl dargestellt wird. Beispiele:

  • Fehlgeschlagene Zahlenkonvertierungen (z. B. parseInt( undefined ))
  • Arithmetische Operationen, bei denen das Ergebnis keine reelle Zahl ist (z. B. 0 / 0, Math.sqrt( -10 ))
  • Eine arithmetische Operation mit einem unbestimmten Ergebnis (0 * Infinity)
  • Eine arithmetische Operation, die entweder ein explizites NaN (NaN + 2) oder ein NaN-Ergebnis (2 * "string" / 2) enthält

Wissen testen

Was passiert, wenn false an Number() übergeben wird?

0
Falsch
NaN
1

Was ist das Ergebnis der folgenden mathematischen Operation?

"Six" * 3

NaN
2
18
Wahr
0