Heim >Web-Frontend >js-Tutorial >Spaß mit JavaScript -Nummern
Schlüsselpunkte
Datentypen sind ein wichtiger Bestandteil jeder Programmiersprache, und Zahlen sind möglicherweise die wichtigsten Datentypen. Computer sind schließlich wirklich nur teure Taschenrechner. Wie jede wertvolle Programmiersprache unterstützt JavaScript numerische Daten. Aber wie viele andere Aspekte von JavaScript gibt es einige Nuancen in Zahlen, die Sie zu Problemen verursachen können, wenn Sie nicht vorsichtig sind. In diesem Artikel werden numerische Daten und einige seiner Merkmale erörtert. Hinweis: Vor dem Lesen dieses Artikels sollten Sie ein grundlegendes Verständnis der JavaScript -Datentypen haben.
Zahlentyp
In JavaScript werden alle Zahlen durch den Zahlendatentyp dargestellt. Dies schließt Ganzzahlen, reelle Zahlen, hexadezimale Zahlen und Zahlen ein, die durch wissenschaftliche Notation dargestellt werden. Das folgende Beispiel überprüft dies, indem der Typeof -Operator auf verschiedene Zahlen angewendet wird. In diesem Beispiel gibt jede Anwendung von Typof eine Nummer zurück.
<code class="language-javascript">typeof(100); typeof(3.14); typeof(0xDEADBEEF); typeof(7.89e2);</code>
Im vorherigen Beispiel befinden sich die Zahlen in verschiedenen Formaten. Innen sind jedoch alle JavaScript -Nummern tatsächlich als IEEE 754 -Schwimmpunktzahlen dargestellt. Dies ist wichtig, da dies bedeutet, dass JavaScript nicht über das Konzept der Ganzzahlen verfügt, obwohl die Sprache die ParseInt () -Funktion hat. Dies bedeutet auch, dass JavaScript -Mathematikoperationen nicht 100% genau sind. Betrachten Sie beispielsweise den folgenden Ausdruck.
<code class="language-javascript">(0.1 + 0.2) === 0.3</code>
Wenn Sie mit schwimmenden Punktzahlen nicht vertraut sind, werden Sie auf jeden Fall erwarten, dass dieser Ausdruck true bewertet wird. Immerhin entspricht 0,1 0,2 0,3. Aufgrund der Funktionsweise der schwimmenden Punktzahlen beträgt ihre Summe jedoch tatsächlich 0,300000000000000000004. Der Unterschied ist gering, aber dies reicht aus, um den gesamten Ausdruck zu bewerten, um sie zu bewerten.
positives Null und negativer Null
Ein weiteres Merkmal des IEEE 754 -Standards ist das signierte Null. Dies führt zu zwei Nullen - positiver Null, 0 und negativer Null, -0. Das mag seltsam erscheinen, aber der Spaß hat gerade erst begonnen. Offensichtlich sind diese beiden unterschiedliche Werte, sonst gibt es nur einen Null. Wenn Sie jedoch einen dieser beiden Nullen zeigen, wird das Symbol gelöscht. Beispielsweise versucht der folgende Code, diese beiden Nullwerte nebeneinander anzuzeigen.
<code class="language-javascript">typeof(100); typeof(3.14); typeof(0xDEADBEEF); typeof(7.89e2);</code>
Schlimmer noch, die Vergleichsbetreiber von JavaScript scheinen auch nicht in der Lage zu sein, zwischen den beiden Werten zu unterscheiden, wie im folgenden Beispiel gezeigt.
<code class="language-javascript">(0.1 + 0.2) === 0.3</code>
Es gibt eine ziemlich einfache Lösung für dieses Problem. In JavaScript erzeugt die Dividierung durch Zero eine Unendlichkeit. Ebenso erzeugt die Dividierung durch negative Null -Infinity. Um festzustellen, ob eine Zahl gleich -0 ist, müssen wir prüfen, ob sie Null ist, und verwenden Sie sie als Nenner für die Teilung und prüfen Sie, wie unten gezeigt.
<code class="language-javascript">alert((+0) + " " + (-0)); // 显示 0 0</code>
nicht-a-number (nan)
JavaScript definiert tatsächlich eine Nummer namens Not-a-Number (NAN). NAN ist ein falscher Wert, der zur Darstellung von Nicht-Zahlen verwendet wird. Dieser Wert ist interessant, weil sein Name selbst die Möglichkeit ausschließt, dass es sich um eine Zahl handelt, aber Typof (NAN) ist eine Zahl. Nan ist auch interessant, weil es der einzige Wert in JavaScript ist, der selbst nicht entspricht. Beispielsweise gibt der folgende Code false zurück.
<code class="language-javascript">alert((+0 === -0)); // 显示 true alert((-0 === +0)); // 显示 true</code>
Sie können NAN mit der Funktion isnan () testen, anstatt den Vergleichsoperator wie unten gezeigt zu verwenden.
<code class="language-javascript">function isNegativeZero(x) { return (x === 0 && (1/x) === -Infinity); }</code>
ist jedoch auch isnan () interessant, weil es irreführend sein kann. Wenn Sie einen Wert weitergeben, der auf eine Zahl gegossen werden kann, gibt ISNAN () FALSE zurück. Im folgenden Beispiel wird Isnan () mit mehreren Werten aufgerufen, die offensichtlich nicht numerisch sind. Jeder Anruf gibt jedoch falsche zurück.
<code class="language-javascript">alert((NaN === NaN)); // 显示 false</code>
Eine bessere Möglichkeit, die NAN zu überprüfen, besteht darin, die Tatsache zu nutzen, dass es sich nicht entspricht. Die folgende Funktion testet die NAN unter Verwendung strikter Ungleichheit. Diese Funktion gibt nur für den Wert NAN true zurück.
<code class="language-javascript">isNaN(1); // 返回 false isNaN(NaN); // 返回 true</code>
Andere lustige Momente
Es gibt einige andere Situationen, die Probleme mit den Zahlen verursachen können. Erstens sollten Sie sich alter Browser bewusst sein, die es globalen Eigenschaften wie Unendlichkeit, NAN und Undefinated als neue Werte ermöglichen. Wenn Sie beispielsweise NAN häufig verwenden, kann der folgende Code viele Probleme verursachen. Glücklicherweise ignorieren moderne Browser Aufgaben für die oben genannten Eigenschaften. Der strenge Modus geht noch einen Schritt weiter und verwandelt diese stillen Fehler in Fehler.
<code class="language-javascript">isNaN(true); isNaN(false); isNaN(""); isNaN(null); // 全部返回 false</code>
Ein weiterer interessanter diagnostischer Fehler ergibt sich aus dem Hinzufügen von Zahlen und Zeichenfolgen. Ein Beispiel wird unten angezeigt. In diesem Fall überschreibt die String -Verkettung die Zugabe. Dies führt dazu, dass Foo in die Zeichenfolge "100" umgewandelt wird. Das Endergebnis ist die Zeichenfolge "1001", die sich stark vom erwarteten Wert von 101 unterscheidet. Diese Art von Fehler ist häufiger als Sie denken und tritt häufig beim Lesen der Benutzereingabe auf.
<code class="language-javascript">function isNotANumber(x) { return x !== x; }</code>
Schlussfolgerung
In diesem Artikel wird einige der Merkmale von Zahlen in JavaScript erörtert. Hoffentlich verstehen Sie jetzt, wie diese Probleme auftreten und wie Sie sie vermeiden können. Und obwohl Sie möglicherweise nicht oft auf Situationen wie negative Nullen stoßen, sind Sie zumindest jetzt bereit.
Häufig gestellte Fragen zu JavaScript -Nummern (FAQ)
In JavaScript ist das Ergebnis, wenn Sie die Zahl durch Null teilen, unendlich. Dies liegt daran, dass eine durch Null geteilte Zahl mathematisch undefiniert ist, aber JavaScript repräsentiert es als unendlich für praktische Zwecke. Wenn Sie jedoch Null durch Null teilen, ist das Ergebnis NAN (nicht eine Zahl), da diese Operation in der Mathematik ungewiss ist.
Bigint ist ein integriertes Objekt in JavaScript, das eine Möglichkeit bietet, Ganzzahlen zu repräsentieren, die größer als 2^53-1 darstellen, die größte Zahl, die JavaScript mithilfe des Zahlenprimitiven zuverlässig darstellen kann. Wenn Sie versuchen, Bigint durch Null zu teilen, werfen JavaScript ein Rangeerror an, der angibt, dass die Operation ungültig ist.
Sie können bedingte Anweisungen in JavaScript verwenden, um die Abteilung durch Nullfehler zu verhindern oder zu verarbeiten, indem Sie überprüfen, ob der Nenner vor der Durchführung des Abteilungsvorgangs Null ist. Wenn der Nenner Null ist, können Sie entscheiden, wie Sie damit umgehen, beispielsweise einen bestimmten Wert zurückgeben oder eine Fehlermeldung anzeigen.
In der Mathematik ist der Ausdruck 0/0 undefiniert, da er keinen expliziten, bestimmten Wert hat. In JavaScript führen undefinierte mathematische Operationen zu NAN (nicht zu einer Nummer). Wenn Sie also Null in JavaScript durch Null teilen, ist das Ergebnis NAN.
In JavaScript sind NAN (nicht eine Zahl) und Unendlichkeit spezielle Werte. NAN stellt einen Wert dar, der keine rechtliche Zahl ist, normalerweise aufgrund undefinierter oder unsicherer mathematischer Operationen. Unendlich stellt dagegen eine Zahl dar, die größer als jede mögliche Zahl ist, normalerweise aufgrund der Teile der Zahl durch Null.
Sie können die Funktion isnan () in JavaScript verwenden, um zu überprüfen, ob das Ergebnis NAN ist. Wenn der Parameter NAN ist, gibt diese Funktion wahr, sonst falsch.
Sie können die Funktion isFinite () in JavaScript verwenden, um zu überprüfen, ob das Ergebnis eine endliche Nummer ist. Wenn der Parameter positiv oder negativ unendlich ist, gibt diese Funktion falsche, sonst wahr zurück.
Die Zahl primitive in JavaScript wird verwendet, um numerische Werte darzustellen. Es kann Ganzzahlwerte und schwimmende Punktzahlen darstellen. Es kann jedoch nur zuverlässig Zahlen bis zu 2^53-1 darstellen.
Um große Zahlen zu verarbeiten, die das JavaScript Secure Integer -Limit überschreiten, können Sie Bigint -Objekte verwenden. Mit Bigint können Sie Ganzzahlen mehr als 2^53-1 repräsentieren.
JavaScript wirft einen Rangeerror aus, wenn der Wert nicht innerhalb des erwarteten Bereichs liegt. Der Versuch, Bigint durch Null zu teilen, führt beispielsweise zu einem Dauerror.
Das obige ist der detaillierte Inhalt vonSpaß mit JavaScript -Nummern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!