2012-05-01 13 views
21

Kann jemand erklären, wie die parseInt() Funktionen funktioniert und was Radix Parameter ist?Mit Javascript parseInt() und einem Radix Parameter

Als Fallstudie, ich versuche, in den Griff mit diesem Code-Schnipsel zu erhalten:

var maxChars = parseInt(formField.attr('maxlength') ? formField.attr('maxlength') : counter.text()); 

Können Sie auch erklären, wie dieser Code funktioniert? Warum ist formField.attr ('maxlength') dort doppelt? Ich finde den Einsatz von Operatoren hier verdammt verwirrend!

Wie funktioniert der Radix Parameter in diesem Beispiel?

+2

Ist [das Handbuch] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt) unklar? – Quentin

+4

Dort ist _is no_ radix in diesem Beispiel angegeben ... Der gesamte Ausdruck in der 'parseInt() 'ist eine ternäre Anweisung, die die maxlength zurückgibt, wenn sie angegeben ist, oder' counter.text() ', wenn dies nicht der Fall ist. –

+1

Am Ende ist alles, was Sie daraus bekommen, entweder 'parseInt (formField.attr (' maxlength ')) 'ODER' parseInt (counter.text()) ' –

Antwort

36

Die ist ein anderer Name für base, d. H. 2 für binär, 10 für dezimal, 16 für hexadezimal, näher erläutert auf der Mozilla Developer Network site.

In Ihrem Beispiel gibt es keine Parameter radix, so wird der Interpreter auf das Standardverhalten zurückgreifen, die in der Regel Zahlen als Dezimalzahl behandelt, sofern sie nicht mit einem Null (Oktal) oder 0x (hexadezimal) starten.

+10

Froh, dass jemand die Frage hier beantwortet hat. Seit wann musst du mit dem Handbuch anfangen? Gib mir eine Pause, die Frage war gültig und hätte nicht abgelehnt werden sollen. –

+4

Firefox, Chrome und IE 9+ behandeln 'parseInt (" 077 ")' als 'parseInt (" 077 ", 10)'. IE8 und darunter behandeln es als 'parseInt (" 077 ", 8)' Deshalb sollten Sie immer die Radix angeben. –

+2

@JuanMendes Ich glaube, dass ES5 das ursprüngliche Verhalten von defaulting auf oktal für eine führende Null veraltet. – Alnitak

2

In der ECMA Script 5, wenn die Zeichenfolge beginnt mit 0 und kein radix das Standardverhalten (zu den früheren Versionen, in denen es war Oktal im Gegensatz) dezimal angegeben ist

Quelle: parseInt() on Mozilla Developer Network

0

parseInt dauert zwei Parameter, die zweite ist optional. Schnur und Radix.

Zeichenfolge ist der zu analysierende Wert. Wenn der angegebene Wert kein String ist, wird er in einen String umgewandelt.

Radix eine ganze Zahl zwischen 2 und 36 , der die Radix (die Basis in der mathematischen Zahlensysteme) der oben genannten Zeichenfolge darstellt.

In Ihrem Code-Snippet wird der Radix nicht angegeben ist und angenommen wird standardmäßig als "maxChars" 16.

var maxChars = parseInt(formField.attr('maxlength') ? formField.attr('maxlength') : counter.text()); 

Sie definieren eine Variable sein. Diese Variable ist gleichbedeutend mit der Auswertung einer IF-Anweisung für eine kurze Hand.

Sie erhalten das Attribut von der Variable, die erwartet wird, ein Selektor "FormField" namens "MaxLength" sein. Der Wert wird als Integer zurückgegeben, er wird auf seine Standard-Radix zurückgreifen.

Die IF-Anweisung prüft, ob der zurückgegebene Wert wahr oder falsch ist. 0, false, ectcetera würde dazu führen, dass der Wert der Variablen "maxChars" auf den kombinierten Text "counters" gesetzt wird. IF true würde dazu führen, dass die Variable als selector "formField" -Attribut namens "maxLength" gesetzt wird.

formField.attr('maxlength') 

Gibt es zweimal, weil man in einer IF-Anweisung Auswertung verwendet wird, und die andere wird als der Wert, wenn die Bedingung in der IF-Anweisung Ergebnisse als TRUE verwendet.

+0

ein bisschen spät, aber Radix ist nicht angegeben, aber es ist nicht immer Standard 16 und dieser Satz ist falsch wegen dieser zweiten Hälfte. es hängt vom Browser und der tatsächlichen Zeichenfolge ab, die übergeben wird. Und auch seit ES5 (wie in den Kommentaren in der angenommenen Antwort angegeben) ist standardmäßig standardmäßig Dezimal/10 – Daemedeor