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