Webdesign mit CSS, HTML und Javascript
Stil mit {stil}
![]() Praxistests aktueller Kameras, Bildbearbeitung und Bildgestaltung foto.5lux.de Online-Magazin für Fotografie und Bildbearbeitung |
Jul 2008
Stings in Zahlen umwandeln und prüfen
parseInt() bzw. parseFloat() wandeln Strings in Zahlen um. parseInt() wird z.B. benötigt, um Eingaben aus Formularfeldern in Zahlen umzuwandeln. Werte von Formularfeldern werden von Javascript immer als String interpretiert, auch wenn der Benutzer 50 in ein Feld eingetragen hat.
| parseInt( x, [radix] ) | parseFloat( x ) | isNaN( x ) | |
| isFinite( x ) | eval( s ) | escape( s )* | |
| unescape( s )* | encodeURI( s ) | decodeURI( string ) | |
| encodeURIComponent( string ) | decodeURIComponent( string ) | Number() | |
| String() |
* escape() gilt seit ECMAScript 3.0 als unerwünscht und soll durch encodeURI() ersetzt werden. encodeURIComponent() gibt es ab JavaScript 1.5. Entsprechendes gilt für unescape().
parseInt()
Parst (analysiert) einen String "x" und gibt die erste Zahl (Integer) zurück, die gefunden wird.
parseInt( x, [radix] )
Ist das erste Zeichen keine Ziffer, Leerzeichen oder ein führendes Minusszeichen, gibt parseInt() NaN zurück. parseInt() unterstützt einen zweiten optionalen Parameter radix, um die Basis der geparsten Zahl anzugeben (im Bereich 2-36). Mit dem Wert "10" interpretiert der Parser die Zahl im Dezimalsystem, während "16" eine Zahl als Hexadezimalwert interpretiert. Ist der Parameter nicht präsent, geht parseInt() davon aus, dass Zahlen, die mit "0x" beginnen, radix 16 sind, "0" radix 8 und alle anderen Zahlen radix 10.
parseInt( "50" ) // liefert 50 parseInt( "3-facher Meister" ) // liefert 3 parseInt( " 5 lebt" ) // liefert 5 parseInt( "Ich habe 3 Computer" ) // liefert NaN parseInt( "17", 8 ) // liefert 15
Vorsichtshalber sollte die Basis 10 bei der Auswertung von Formularenfeldern immer angegeben werden, damit führende Nullen nicht zu Fehlern führen.
parseInt('017') // liefert 15
parseInt('17') // liefert 17
parseFloat( x )
Parst einen String x und gibt die erste Fliesskommazahl – also die erste Zahl mit einem Dezimalpunkt – zurück. Ist das erste Zeichen im String keine Ziffer, Weißraum oder ein führendes Minuszeichen, gibt parseFloat() NaN zurück.
parseFloat( "15.87" ) // gibt 15,87 zurück parseFloat( "-17,8 Meter" ) // gibt -17 zurück parseFloat( "foo " ) // gibt NaN zurück
parseFloat() wandelt z.B. Eingaben in Formularfeldern in Zahlen um. Javascript interpretiert die Werte von Formularfeldern immer als String, auch wenn der Benutzer '17.87' in ein Feld eingetragen hat. Bei der Transformation von Fliesskommazahlen aus Formularfeldern müssen Kommas vor dem Aufruf von parseInt() in Punkte umgewandelt werden, da parseInt() ansonsten nur die Zahl bis zum Komma umwandelt.
x = x.replace( /,/,"." ); y.value = parseFloat( x );
isNaN()
isNaN() prüft, ob x den Wert NaN (not a number) aufweist – eine illegale Zahl. Die Funktion gibt true zurück, wenn x NaN ist und ansonsten false. Ein typisches Beispiel für NaN ist »0 dividiert durch 0«. Für die Prüfung ist NaN erforderlich, da die Gleichheitsoperatoren (== und ===) hier nicht funktionieren.
isFinite(x)
Stellt fest, ob eine Zahl endlich (finit) ist. Gibt false zurück, wenn x +infinity, -infinity oder NaN ist (ab JavaScript 1.3).
alert( 2.17424 ); // gibt true zurück alert( 1.5E+317 ); // gibt false zurück alert( 17/3 ); // gibt true zurück alert( 0/0 ); // gibt false zurück
eval( s )
eval() prüft zuerst, ob s ein String ist, entwickelt den String und führt ihn aus, wenn der String Javascript-Anweisungen enthält. Am Ende gibt eval() den Wert der letzten Anweisung aus – d.h. eval() führt Anweisungen aus, die als Zeichenkette – z.B. aus einer Benutzereingabe – vorliegen. eval() erlaubt die dynamische Konstruktion von JavaScript-Anweisungen und -Ausdrücken.
eval() erwartet einen String. Wenn der String einen gültigen Ausdruck darstellt, führt eval() den Ausdruck aus. Das Argument ist optional – wenn kein Argument übergeben wird, gibt eval() undefined zurück. Wenn das Argument kein String ist, gibt eval() das Argument unverändert zurück.
Natürlich wird eval() nicht wie in diesen Beispielen aufgerufen, um einen Ausdruck auszuführen … Javascript führt Ausdrücke automatisch aus. Sinnvoll ist eval() z.B., wenn Ausdrücke als Benutzereingabe aus einem Formularfeld übernommen werden und als String übernommen werden.
function quad( num )
{
return ( num*num );
}
var sinn = 42;
eval( "42 + 8 * 2" ); // gibt 100 zurück
eval( "sinn - quad( 3 )" ); // gibt 33 zurück
eval( "var z= 0; for (var i=0; i<sinn; i++) z++;" ) // gibt 41 zurück
eval( alert( sinn ) ) // gibt 42 aus
eval() gilt als bedenklich: Im Eingabefeld des Beispiels werden nicht nur fromme mathematische Ausdrücke entwickelt und harmlose Javascript-Anweisungen wie alert( 'Hallo Welt' ) und history.back(), sondern jede Anweisung.
