Die parseInt-Funktion von Javascript scheint nicht vollständig zu funktionieren.
parseInt("01") returns 1
parseInt("02") returns 2
parseInt("03") returns 3
parseInt("04") returns 4
parseInt("05") returns 5
parseInt("06") returns 6
parseInt("07") returns 7
parseInt("08") returns 0
parseInt("09") returns 0
Das kannst du nicht erklären. Versuche es. (jsFiddle)
Bearbeiten Da diese Frage gestellt und beantwortet wurde, ist die "Funktion" der Standardeinstellung für Oktalradix veraltet. [ 1 ] [ 2 ]
javascript
Sparer
quelle
quelle
You can't explain that.
Ja, Sie können => developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…Antworten:
Dies liegt daran, dass eine Zahl, die mit einer '0' beginnt, als Basis 8 (oktal) behandelt wird.
Sie können die Basis erzwingen, indem Sie die Basis als 2. Parameter übergeben.
Gemäß den Dokumenten ist der 2. Parameter optional, es wird jedoch nicht immer angenommen, dass er 10 ist, wie Sie aus Ihrem Beispiel sehen können.
quelle
11
in Basis 8 ist9
in Basis 10.09
ist keine gültige Basis 8-Nummer.Aufrufe von
parseInt
sollten im zweiten Argument immer eine Basis angeben:Frühere Versionen von JavaScript behandeln Zeichenfolgen, die mit
0
oktal beginnen (wenn keine Basis angegeben ist) und weder08
noch09
gültige Oktalzahlen.Aus der Mozilla- Dokumentation :
Und aus dem ECMAScript 3- Standard:
Die neueste Version von JavaScript ( ECMAScript 5 ) gibt dieses Verhalten auf , Sie sollten jedoch weiterhin den Radix angeben , um ältere Browser zufrieden zu stellen.
quelle
Es gibt einen Radix-Parameter
Wo Basis ist der Radix.
In diesem Fall werten Sie Base10-Zahlen (Dezimalzahlen) aus. Verwenden Sie daher
quelle
Dies scheint in neuen Browsern nicht vollständig gültig zu sein. Internet Explorer 9 und 10 geben 8 zurück, wenn Sie 'parseInt ("08")' ausführen, während Internet Explorer 8 und frühere Versionen 0 zurückgeben (IE10 im Quirks-Modus gibt ebenfalls 0 zurück).
Die neueste Version von Chrome gibt auch 8 zurück, daher muss die Interpretation kürzlich geändert worden sein.
quelle
Dieses Problem ist jetzt veraltet. Sie können jedoch weiterhin radix in verwenden
parseInt
, um die Anzahl anderer Basen in Base-10 umzuwandeln. Z.B,gibt zurück
17
(das ist Basis-10 von0010001
).quelle
Tipp: Wie Sie jetzt wissen, ist die Standardeinstellung für Oktal veraltet. Hier erfahren Sie, wie Sie das Problem in älteren Browsern beheben können
quelle
Das Problem scheint sich jetzt in den meisten Browsern geändert zu haben.
Firefox 51.0.1 (64-Bit)
Chrome 55.0.2883.95 (64-Bit)
Safari 10.0 (12602.1.50.0.10)
=====
Empfohlene Praxis
Um jedoch auf der sicheren Seite zu sein und Probleme zu vermeiden, verwenden Sie den Parameter base / radix, wie in der akzeptierten Antwort vorgeschlagen .
Extra Test
Ich wollte das auch nur testen, wenn das Argument keine Zeichenfolge ist. Chrome & Safari liefert ein genaues Ergebnis. Auch Firefox liefert das richtige Ergebnis, jedoch mit einer Warnung.
quelle