molily: Chekbox

Beitrag lesen

Nimm mal an, du hättest zwei - unbeabsichtigt - "ungültige" mathematische Berechnungen in deinem Script, und würdest deren Ergebnisse miteinander vergleichen, um etwas davon abhängig zu machen.

Klar: In einem Term soll NaN immer »zerstörerisch« sein und sich durchsetzen, also (grob gesagt) bei jeder Operator, bei dem NaN Operand ist, kommt NaN heraus, damit das Ergebnis des ganzen Terms auch NaN ist, sobald irgendwo ein Fehler auftrat. So kann der Programmierer sehen, dass irgendwo ein Fehler aufgetreten ist.

Andererseits macht diese Idee gerade bei den Vergleichsoperatoren m.M.n. keinen Sinn. Deren Ergebnis ist immer Boolean, da sehe ich doch vom irgendwo auftretenden NaN und damit vom möglicherweise auftretenden Fehler gar nichts mehr.

5 == 6     > false // Annahme: Werte sind ungleich, also ist hier das erwartete passiert
5 == NaN   > false // Fehler, aber Prüfung bestanden > irreführend
NaN == NaN > false // Fehler, aber Prüfung bestanden > irreführend

Dein Beispiel erklärt, warum NaN bei anderen (arithmetischen) Operatoren zerstörerisch wirkt. Die Regel, dass der Vergleichsoperator beim Vergleich mit NaN immer false zurückgibt, hilft aber nur wenig weiter. Sie hilft nur in dem Fall, dass *beide* Operatoren unabhängig voneinander ungültig (NaN) werden *und* man vermutet, dass sie gleich sind.

Mathias