Ich habe ein nerviges Problem in JavaScript .
> parseInt(1 / 0, 19)
> 18
Warum kehrt die parseInt
Funktion zurück 18
?
javascript
parseint
cebor
quelle
quelle
if
könnte ein helfen.Antworten:
Das Ergebnis von
1/0
istInfinity
.parseInt
behandelt sein erstes Argument als Zeichenfolge, was bedeutet, dass zuerstInfinity.toString()
aufgerufen wird und die Zeichenfolge erzeugt wird"Infinity"
. Es funktioniert also genauso, als ob Sie es gebeten hätten, die"Infinity"
Basis 19 in eine Dezimalzahl umzuwandeln .Hier sind die Ziffern in Basis 19 zusammen mit ihren Dezimalwerten:
Als Nächstes wird
parseInt
die Eingabe gescannt,"Infinity"
um festzustellen, welcher Teil davon analysiert werden kann, und nach dem Akzeptieren des ersten angehaltenI
(dan
in Basis 19 keine gültige Ziffer vorhanden ist).Daher verhält es sich so, als hätten Sie aufgerufen
parseInt("I", 19)
, was in der obigen Tabelle in Dezimalzahl 18 konvertiert wird.quelle
parseInt('Infini',24)
.n
auch eine gültige Ziffer ist, endet dies tatsächlichparseInt("Infini", 24)
.Hier ist die Abfolge der Ereignisse:
1/0
bewertet zuInfinity
parseInt
liestInfinity
und stellt glücklich fest, dassI
18 in Basis 19 istparseInt
ignoriert den Rest der Zeichenfolge, da sie nicht konvertiert werden kann.Beachten Sie, dass Sie für jede Basis ein Ergebnis erhalten
>= 19
, jedoch nicht für Basen darunter. Für Basen erhalten>= 24
Sie ein größeres Ergebnis, da esn
zu diesem Zeitpunkt zu einer gültigen Ziffer wird.quelle
parseInt
die akzeptiert wird, ist 36, da das englische Alphabet 26 Buchstaben enthält und die Konvention darin besteht, Ziffern und dann Buchstaben als Satz gültiger Ziffern in der angegebenen Basis zu verwenden.Infinity
zu"Infinity"
...So ergänzen Sie die obigen Antworten:
parseInt soll Zeichenfolgen in Zahlen analysieren (der Hinweis befindet sich im Namen). In Ihrer Situation möchten Sie überhaupt keine Analyse durchführen, da 1/0 bereits eine Zahl ist, daher ist es eine seltsame Wahl der Funktion. Wenn Sie eine Zahl haben (was Sie tun) und diese in eine bestimmte Basis konvertieren möchten, sollten Sie stattdessen toString mit einem Radix verwenden.
quelle
Zu den obigen Antworten hinzufügen
parseInt(1/0,19)
ist äquivalent zuparseInt("Infinity",19)
Innerhalb der Basis 19 Zahlen
0-9
undA-I
(or a-i)
sind gültige Zahlen. Also, von der "Unendlichkeit" nimmt esI
von Basis 19 und konvertiert zu Basis 10, die zu 18 wird. Dann versucht es, das nächste Zeichen zu nehmen, dhn
das in der Basis 19 nicht vorhanden ist, und so die nächsten Zeichen zu verwerfen (gemäß dem Verhalten von Javascript beim Konvertieren von Zeichenfolgen in Zahlen )Wenn Sie also
parseInt("Infinity",19)
ODERparseInt("I",19)
ODER schreiben, istparseInt("i",19)
das Ergebnis dasselbe, dh18
.Nun, wenn Sie schreiben ,
parseInt("I0",19)
das Ergebnis wird sein ,342
wieI X 19 (the base)^1 + 0 X 19^0
=18 X 19^1 + 0 X 19^0
=18 X 19 + 0 X 1
=342
Ebenso
parseInt("I11",19)
wird sich ergeben6518
dh
quelle