"" == 0 aber nur manchmal

- javascript
Liebe Mitlesende,
heute wieder mit Datentypen in JavaScript herumhantiert. Dabei ist mir folgendes aufgefallen bzw. wieder bewusst geworden:
"" == 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.
"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"
.
"" in { 0: "a", 1: "b"} // false
"0" in { 0: "a", 1: "b"} // true
falsche Schlussfolgerung: Nur was in echte Zahlenwerte umgewandelt werden kann, eignet 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
Zusatz:
"" == 0 // true
[...] Hier werden beide als
false
gewertet und scheinen deshalb gleich.
Das führt auch dazu:
Number("") // 0
Ein als Zahl umgedeuteter Leerstring ergibt tatsächlich den Zahlenwert null.
Liebe Grüße
Felix Riesterer