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 einNaN
-Ergebnis (2 * "string" / 2
) enthält
Wissen testen
Was passiert, wenn false
an Number()
übergeben wird?
Was ist das Ergebnis der folgenden mathematischen Operation?
"Six" * 3