Felix Riesterer: "" == 0 aber nur manchmal

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

  1. 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