molily: if-else Syntax

Beitrag lesen

Hallo,

ich habe mir mal wegen Java Netbeans herunter geladen und es mit einer Javascript-Datei ausprobiert ... soll ja funktionieren.
Jetzt meldet mir die Überprüfungsfunktion alle Vergleiche als fehlerhaft

Viele JavaScript-IDEs haben die Prüftools JSLint oder JSHint eingebaut. Diese basieren auf den Empfehlungen aus dem Buch »JavaScript – The Good Parts« von Douglas Crockford.

Der Operator == gilt als ein Fallstrick von JavaScript, weil er zum Vergleich der Werte automatisch deren Typ umwandelt und angleicht. Die Regeln dafür kann man lernen, sind aber nicht intuitiv. Auf diese Weise kommt gerne eine Gleichheit heraus, die man nicht erwartet. Das kann zu fehlerhaften bzw. unzuverlässigen Programmen führen.

JSHint und JSLint empfehlen deshalb, ausschließlich den Operator === zu verwenden, welcher keine Typumwandlungen vornimmt und eine Identität bzw. Wert- und Typgleichheit überprüft. Dis führt zu zuverlässigerem Code. Außerdem wird der Code eindeutig. Da es keine implizite Typumwandlung gibt, müssen Sonderfälle explizit geprüft werden.

Meta-Sprachen wie CoffeeScript, die nach JavaScript kompilieren, beherzigen viele Richtlinien aus den »Good Parts«. Daher wird == automatisch zu === umgeschrieben.

Die Regel, ausschließlich === zu verwenden, ist durchaus sinnvoll. Allerdings ist automatische Typumwandlung (sowohl beim Vergleich als auch beim Umwandeln in Boolean) ein wichtiges Feature dynamischer Sprachen und ich nutze es gerne. Dass "123" == 123 true ergibt, ist in der Regel ein nützliches Feature. In vielen Fällen ist eine explizite Typprüfung nicht notwendig, weil sich aus dem Kontext der Typ ergibt bzw. keine Gefahr besteht (z.B. typeof foo == 'string'). Bei Objekten prüfen sowohl == als auch === die Identität, es gibt also keinen Unterschied. Beim Testen auf null oder undefined ist wert == undefined kürzer als wert === undefined || wert ==== null.

Bei den Regeln der »Good Parts« geht es darum, dass nicht jeder dieses Wissen hat, aber trotzdem robust programmieren soll. Daher die simple Regel, *immer* === zu verwenden, auch wenn == im Einzelfall unproblematisch oder identisch mit === sein mag.

Grüße,
Mathias