Java Reference
In-Depth Information
</script>
</body>
</html>
Sie sehen zuerst die Deklaration und Initialisierung einer Variablen mit diversen Sonder-
zeichen und Umlauten. Diese Zeichenkette wird maskiert und einer weiteren Variablen
zugewiesen. An der Ausgabe der beiden Variablen erkennen Sie die Auswirkungen. Die
nachfolgende Ausgabe demonstriert die Demaskierung mit unescape() . Soweit ist die
Sache recht einfach. Im nächsten Abschnitt wollen wir uns den Nutzen von eval() sowie
parseInt() und parseFloat() ansehen. Sie sehen, dass wir mit zwei Variablen arbeiten,
die mit Textliteralen initialisiert werden. Diese sollen sowohl Zahlen als auch Text enthal-
ten. Und das ist eben nicht so abwegig, wie es im ersten Moment scheinen mag. Die Text-
literale machen ja deutlich, was es an sinnvollen Situationen geben kann. Wir wollen den
Fall simulieren, dass in der Variable netto der Nettopreis eines Produkts und in der Varia-
ble mwst die Mehrwertsteuer bereitgestellt werden. Und beide Werte haben auch in der
Praxis Einheiten . Das ist die Kennung EUR für die Währung und das Prozentzeichen bei der
Mehrwertsteuer. Und wenn Sie diese Angaben mit Einheiten erhalten, können Sie diese
eben nicht unmittelbar in einer mathematischen Operation verwenden. Wie Sie sehen, lie-
fert dann die Multiplikation der beiden Werte NaN , was wir mit isNaN() überprüfen. Im
Grunde brauchen wir in dieser Situation die Funktion eval() auch nicht, aber wir wollen
den Fall zeigen, dass wir einen auswertbaren Ausdruck als kompletten String bekommen.
Das ist in der Praxis sehr ot der Fall. Um den Ausdruck nun auswerten zu können, müssten
wir ihn ohne eval() erst einmal zerlegen. Der Einsatz von eval() macht so etwas überlüs-
sig. Die gesamte Aktion wird zwar wegen der Einheiten scheitern, aber Sie können an der
Ausgabe von eval() erkennen, dass die Funktion zumindest die Zahl samt der Einheit aus
der Variable netto evaluiert und damit den Ausdruck teils schon erfolgreich evaluiert hat,
bevor die nachfolgenden Schritte NaN liefern. Die Funktion eval() arbeitet einen Ausdruck
wie üblich von links nach rechts ab.
Die folgenden Zeilen demonstrieren nun die konkrete Anwendung von parseFloat() und
parseInt() , um die numerischen Werte aus den Variablen netto und mwst zu extrahieren
und damit dann die Berechnung doch noch erfolgreich durchzuführen. Wir könnten hier
auch wieder eval() einsetzen, aber zum einen wäre das umständlicher und zum anderen
ist ja der Einsatz der Funktion grundsätzlich kritisch. Wenn man ihn vermeiden kann,
sollte man ihn auch umgehen.
Im folgenden Abschnitt widmen wir uns noch einmal NaN und isNaN() im Detail. Denn
beim Umgang mit NaN sind die Verhältnisse in JavaScript - sagen wir einmal - etwas „selt-
sam“. Zuerst einmal überprüfen wir mit isNaN() , ob die Auswertung von oben beschrie-
benem eval() NaN liefert. Und die Funktion gibt erwartungsgemäß true zurück. Das ist
noch nicht „seltsam“. Im nächsten Schritt beweisen wir aber, dass man nicht direkt mit
Vergleichsoperationen auf NaN prüfen kann. Wir vergleichen nämlich NaN mit sich selbst
( NaN == NaN )! Und das liefert false ! Natürlich ist so ein Extremfall als Vergleich in der
Praxis sinnlos, aber das Resultat ist schon eindrucksvoll oder nach meinem Empinden
eben „seltsam“. Ich empinde es ebenso nicht weniger seltsam, dass der Typ von NaN Number
ist, wie Sie am Rückgabewert number von typeof NaN sehen. Die Eigenschat „Nicht eine
Zahl“ ist eine Zahl. Wenn so etwas nicht eigenartig ist 5  . . .
5 Solche Dinge oder auch die Tatsache, dass undeined einen wohldeinierten Zustand beschreibt, haben viel zu dem
etwas unglücklichen Ruf von JavaScript beigetragen.
 
Search WWH ::




Custom Search