Ich habe ein nerviges Problem in JavaScript .
> parseInt(1 / 0, 19)
> 18
Warum kehrt die parseIntFunktion zurück 18?
Ich habe ein nerviges Problem in JavaScript .
> parseInt(1 / 0, 19)
> 18
Warum kehrt die parseIntFunktion zurück 18?
Antworten:
Das Ergebnis von 1/0ist Infinity.
parseIntbehandelt sein erstes Argument als Zeichenfolge, was bedeutet, dass zuerst Infinity.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:
Base 19 Base 10 (decimal)
---------------------------
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
a 10
b 11
c 12
d 13
e 14
f 15
g 16
h 17
i 18
Als Nächstes wird parseIntdie Eingabe gescannt, "Infinity"um festzustellen, welcher Teil davon analysiert werden kann, und nach dem Akzeptieren des ersten angehalten I(da nin 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.
parseInt('Infini',24).
nauch eine gültige Ziffer ist, endet dies tatsächlich parseInt("Infini", 24).
Hier ist die Abfolge der Ereignisse:
1/0 bewertet zu InfinityparseIntliest Infinityund stellt glücklich fest, dass I18 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 >= 24Sie ein größeres Ergebnis, da es nzu diesem Zeitpunkt zu einer gültigen Ziffer wird.
parseIntdie 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.
Infinityzu "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.
var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"
Zu den obigen Antworten hinzufügen
parseInt(1/0,19) ist äquivalent zu parseInt("Infinity",19)
Innerhalb der Basis 19 Zahlen 0-9und A-I (or a-i)sind gültige Zahlen. Also, von der "Unendlichkeit" nimmt es Ivon 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)ODER parseInt("I",19)ODER schreiben, ist parseInt("i",19)das Ergebnis dasselbe, dh 18.
Nun, wenn Sie schreiben , parseInt("I0",19)das Ergebnis wird sein , 342
wie I 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
18 X 19^2 + 1 X 19^1 + 1 X 19^0
= 18 X 19^2 + 1 X 19^1 + 1 X 19^0
= 18 X 361 + 1 X 19 + 1 X 1
= 6498 + 19 + 1
= 6518
ifkönnte ein helfen.