1UnitedPower: Crockford on Javascript - Geschichte und Bad/Good Parts

Beitrag lesen

Hakuna matata!

Doch, auch der typsichere Vergleich birgt noch seine Fallstricke:

NaN === NaN; // false

Äpfel sind keine Birnen, aber beide sind NaN, möchtest du jetzt Äpfel === Birnen  auf true auswerten?

Nein, Äpfel und Birnen haben hoffentlich ihre Objekt-Identitäten, die man zum Vergleichen heranziehen kann. NaN ist ein primitiver Wert, hat keine Identität und ist trotzdem nicht strikt gleich (===) zu sich selbst. Diese Eigenschaften machen NaN einmalig in JavaScript, und Entwickler müssen entsrepchende Ausnahme- und Grenzfälle nur für NaN kennen. Man kann NaN zum Beispiel nicht einfach in einem Array finden:

[NaN].indexOf( NaN ); // -1

-0 === +0; // true[/code]

m.E. mathematisch völlig korrekt

Aus mathematischer Sicht ist es sicher sinnvoll, positive und negative Null gleich zu behandeln. Aus Perspektive eines JavaScript-Programmiers ist es komplizierter, denn der muss die Feinheiten von Maschinenzahlen und der Floating-Point-Arithmetik kennen. Und  in den Maschinenzahlen ist die positive Null eine andere Zahl als die negative Null.

Es ist doch schön, dass es mit Object.is() endlich mal eine Vergleichsfunktion gibt, die so schön geradeaus und ohne Ausnahmen von der Regel arbeitet. Achja, und das beste ist natürlich, es ist eine _Funktion_ und kein Operator und man kann sie anderen Funktionen als Argument übergeben: Eine Identitätsfunktion – und alle funktionale-Programmierung-Liebhaber schreiben: "yay!"

--
“All right, then, I'll go to hell.” – Huck Finn