Ich habe JSLint mit diesem JavaScript-Code ausgeführt und es stand:
Problem in Zeile 32, Zeichen 30: Fehlender Radix-Parameter.
Dies ist der fragliche Code:
imageIndex = parseInt(id.substring(id.length - 1))-1;
Was ist hier falsch?
Ich habe JSLint mit diesem JavaScript-Code ausgeführt und es stand:
Problem in Zeile 32, Zeichen 30: Fehlender Radix-Parameter.
Dies ist der fragliche Code:
imageIndex = parseInt(id.substring(id.length - 1))-1;
Was ist hier falsch?
Antworten:
Es ist immer eine gute Praxis, radix mit parseInt zu übergeben -
parseInt(string, radix)
Für Dezimalstellen -
parseInt(id.substring(id.length - 1), 10)
Wenn der Radix-Parameter weggelassen wird, geht JavaScript von Folgendem aus:
( Referenz )
Redundant radix parameter
radix
Argument ist ein numerischer Wert, keine Zeichenfolgendarstellung eines numerischen Werts, daher muss kein Radix angegeben werden.
Um diese Warnung zu vermeiden, anstatt Folgendes zu verwenden:
parseInt("999", 10);
Sie können es ersetzen durch:
Number("999");
Beachten Sie, dass parseInt und Number sich unterschiedlich verhalten . In einigen Fällen kann jedoch eines das andere ersetzen.
parseInt
und Number
. Hier ist ein alter Leistungstest .
Number()
ist 6x schneller alsparseInt()
Ich beantworte die Frage nicht richtig, aber ich denke, es ist sinnvoll zu klären, warum wir den Radix angeben sollten .
In der MDN-Dokumentation können wir Folgendes lesen:
Wenn radix undefiniert ist oder 0 ist (oder fehlt), geht JavaScript von Folgendem aus:
Quelle: MDN parseInt ()
Sie können diese Regel deaktivieren, wenn Sie diesen Test überspringen möchten.
Einfügen:
radix: false
Unter der rules
Eigenschaft " " in der tslint.json
Datei.
Es wird nicht empfohlen, dies zu tun, wenn Sie diese Ausnahme nicht verstehen.
Wenn Sie Folgendes zu Ihrer JS-Datei hinzufügen, wird JSHint angewiesen, die Radix-Warnung zu unterdrücken:
/*jshint -W065 */
Siehe auch: http://jshint.com/docs/#options
"-W065": true
zB in einer .jshintrc
Datei verwenden.
Ich habe es mit nur + foo gelöst, um den String zu konvertieren.
Denken Sie daran, es ist nicht gut für die Lesbarkeit (Dirty Fix).
console.log( +'1' )
// 1 (int)
Sie können diese Zeile auch einfach direkt über Ihrer parseInt-Zeile hinzufügen:
// eslint-disable-next-line
Dadurch wird die Eslint-Prüfung für die nächste Zeile deaktiviert. Verwenden Sie diese Option, wenn Sie nur eine oder zwei Zeilen überspringen müssen.
Fügen Sie einfach eine leere Zeichenfolge an die Stelle des Radix ein, da parseInt () zwei Argumente akzeptiert:
parseInt (string, radix);
string Der zu analysierende Wert. Wenn das Zeichenfolgenargument keine Zeichenfolge ist, wird es in eine Zeichenfolge konvertiert (mithilfe der abstrakten Operation ToString). Führende Leerzeichen im Zeichenfolgenargument werden ignoriert.
radix Eine Ganzzahl zwischen 2 und 36, die den Radix (die Basis in mathematischen Zahlensystemen) der oben genannten Zeichenfolge darstellt. Geben Sie 10 für das Dezimalzahlensystem an, das üblicherweise von Menschen verwendet wird. Geben Sie diesen Parameter immer an, um Verwirrung beim Leser zu vermeiden und ein vorhersehbares Verhalten zu gewährleisten. Unterschiedliche Implementierungen führen zu unterschiedlichen Ergebnissen, wenn kein Radix angegeben wird. Der Standardwert ist normalerweise 10.
imageIndex = parseInt (id.substring (id.length - 1)) - 1;
imageIndex = parseInt(id.substring(id.length - 1), '')-1;
Fügen "radix": "off"
Sie einfach Ihre benutzerdefinierte Regel in .eslintrc hinzu, die so aussieht,
und Sie sind frei von dieser unauffälligen Warnung. Dies ist für den Eslint-Linter.
Vor ECMAScript 5 erkannte parseInt () auch automatisch Oktalliterale, was zu Problemen führte, da viele Entwickler davon ausgegangen waren, dass eine führende 0 ignoriert würde.
Also statt:
var num = parseInt("071"); // 57
Mach das:
var num = parseInt("071", 10); // 71
var num = parseInt("071", 8);
var num = parseFloat(someValue);