"" == 0 aber nur manchmal
bearbeitet von Felix RiestererLiebe Mitlesende,
heute wieder mit Datentypen in JavaScript herumhantiert. Dabei ist mir folgendes aufgefallen bzw. wieder bewusst geworden:
~~~ javascript
"" == 0 // true
"" == 1 // false
~~~
*falsche* Schlussfolgerung: Ein Leerstring entspricht dem Zahlenwert einer null.
Erklärung: Das scheint nur so. Hier werden beide als `false` gewertet und scheinen deshalb gleich.
~~~ javascript
"0" == 0 // true
"1" == 0 // false
~~~
*falsche* Schlussfolgerung: Ein Ziffern-String wird intern bei Bedarf zu einem Integer-Wert gewandelt.
Erklärung: Es ist das Wesen von schwach typisierten Sprachen, dass bei Vergleichen von verschiedenen Datentypen diese zuerst passend umgewandelt werden. Üblicherweise werden aber letzten Endes die String-Umwandlungen verglichen. Es ist nach der Umwandlung also eher ein `"0" == "0"` und ein `"1" == "0"`.
~~~ javascript
"" in { 0: "a", 1: "b"} // false
"0" in { 0: "a", 1: "b"} // true
~~~
*falsche* Schlussfolgerung: Nur was in echte Zahlenwerte umgewandelt werden kann, eigent sich als Eigenschaftswert eines Objekts.
Erklärung: Eigenschaftsnamen sind grundsätzlich Strings, auch wenn sie wie Integer-Werte aussehen mögen.
Nicht immer ist der Einsatz des typsicheren Vergleichsoperators `===` gewünscht oder für die jeweilige Aufgabenstellung sinnvoll.
Liebe Grüße
Felix Riesterer