678 Stimmen

JSLint sagt "fehlender Radix-Parameter"

Ich habe JSLint auf diesen JavaScript-Code angewendet und es sagte:

Problem in Zeile 32 Zeichen 30: Fehlender Radix-Parameter.

Dies ist der betreffende Code:

imageIndex = parseInt(id.substring(id.length - 1))-1;

Was ist hier falsch?

1169voto

Jayendra Punkte 51779

Es ist immer eine gute Praxis, radix mit parseInt zu übergeben -

parseInt(string, radix)

Für dezimale -

parseInt(id.substring(id.length - 1), 10)

Wenn der Parameter radix weggelassen wird, geht JavaScript von folgendem aus:

  • Beginnt die Zeichenkette mit "0x", ist das Radix 16 (hexadezimal)
  • Beginnt die Zeichenkette mit "0", so ist das Radix 8 (oktal). Diese Funktion ist veraltet
  • Beginnt die Zeichenkette mit einem anderen Wert, ist das Radix 10 (dezimal)

( Referenz )

7 Stimmen

So wie es sich anhört, ist der Standardwert 10. Wenn es nicht mit 0x oder 0 beginnt, ist es standardmäßig ein Radix von 10. Aber es ist die beste Praxis, ein Radix anzugeben, auch wenn es der Standardwert ist, so wie die Definition von "this" für eine array.map-Funktion anzugeben.

116 Stimmen

Das ist so unvernünftig... nach dieser Logik sollte es einen dritten Parameter geben, der die Radix des Radix-Arguments selbst darstellt

8 Stimmen

Ich stimme den anderen Kommentatoren zu. Warum ist es gut, einen Radix-Wert anzugeben, wenn der Standardwert 10 ist? Dies widerspricht den üblichen Konventionen.

168voto

Zanon Punkte 25577

Um diese Warnung zu vermeiden, verwenden Sie stattdessen:

parseInt("999", 10);

Sie können es durch ersetzen:

Number("999");

Beachten Sie, dass parseInt und Number über unterschiedliche Verhaltensweisen Aber in manchen Fällen kann das eine das andere ersetzen.

8 Stimmen

Außerdem gibt es große Leistungsunterschiede zwischen parseInt y Number . Hier ist eine alter Leistungstest .

13 Stimmen

Chrom 77: Number() ist 6x schneller als parseInt()

1 Stimmen

Die wahre Antwort.

55voto

nmoliveira Punkte 1709

Ich beantworte die Frage nicht richtig, aber ich denke, es ist sinnvoll, die warum wir das Radix angeben sollten .

In der MDN-Dokumentation können wir das nachlesen:

Wenn radix undefiniert oder 0 (oder nicht vorhanden) ist, nimmt JavaScript an, dass die Folgendes an:

  • [...]
  • Beginnt der Eingabe-String mit "0", ist die Radix acht (oktal) oder 10 (d ECMAScript 5 legt fest, dass 10 (dezimal) verwendet wird, aber noch nicht alle Browser unterstützen dies. Aus diesem Grund sollten Sie bei der Verwendung von parseInt immer ein Radix an, wenn Sie parseInt verwenden.
  • [...]

Quelle: MDN parseInt()

3 Stimmen

Ja, aber der Typescript-Compiler fügt sie ein, also warum sollten Sie sich die Mühe machen?

2 Stimmen

@Spock Weil TSLint sich beschwert, dass es nicht da ist. Und wir gehen den Kaninchenbau hinunter...

1 Stimmen

Ja, stimmt deshalb deaktiviere ich diese Fusselregel einfach. Verstehe immer noch nicht, warum ein OPTIONALer Parameter eine Fusselbeschwerde auslöst na ja

34voto

Spock Punkte 2311

Sie können diese Regel deaktivieren, wenn Sie diesen Test auslassen möchten.

Einfügen:

radix: false

Unter dem " rules " Eigenschaft in der tslint.json Datei.

Es ist nicht empfehlenswert, dies zu tun, wenn Sie diese Ausnahme nicht verstehen.

1 Stimmen

Ich werde dies verwenden, da der Code auch ohne Radix gut läuft

22voto

aleemb Punkte 29695

Durch Hinzufügen der folgenden Zeile zu Ihrer JS-Datei wird JSHint angewiesen, die Radix-Warnung zu unterdrücken:

/*jshint -W065 */

Siehe auch: http://jshint.com/docs/#options

2 Stimmen

Auf welche jshint-Option bezieht sich dies? Ich benutze SublimeLint, um jshint in meinem Editor auszuführen, und es nimmt nur einen Hash von Option: Wertepaare für seine Einstellung, so dass ich nicht glaube, ich kann Ihre "-W065" Vorschlag anwenden.

5 Stimmen

Sie können verwenden "-W065": true z.B. in einer .jshintrc Datei.

30 Stimmen

-1 Bitte tun Sie das nicht, fügen Sie einfach das zu analysierende Radix in

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X