molily Navigation

Artikel überarbeitet: Objektabfragen und Fallunterscheidungen in JavaScript

In der browserübergreifenden JavaScript-Entwicklung haben Objektabfragen und Feature-Tests einen zentralen Stellenwert. Es gibt jedoch verschiedene Methoden, um Objekte und Werte zu überprüfen, und es herrscht Unklarheit darüber, wie sie intern funktionieren und in welchen Fällen sie angewendet werden. Diese Fragen klärt der Artikel Objektabfragen und Fallunterscheidungen in JavaScript, den ich jüngst überarbeitet habe.

JavaScript als dynamisch und schwach getypte Sprache versucht die Programmierung durch automatische Typumwandlung (Coercion) zu vereinfachen. In den überwiegenden Fällen funktioniert Coercion so wie gewünscht: Man merkt sie nicht, aber sie findet statt und das Programm verhält sich wie erwartet. In den restlichen Fällen muss man hingegen höllisch aufpassen. Auch wenn diese Fälle selten sind, so hat JavaScript dadurch den Ruf bekommen, fragilen und fehleranfälligen Code zu begünstigen.

Eine Möglichkeit damit umzugehen, ist Coercion möglichst zu umgehen, indem man typsichere Operatoren wie === verwendet, strenge Typabfragen mit typeof vornimmt und sämtliche Umwandlungen explizit vornimmt. Der bekannte JavaScript-Theoretiker Douglas Crockford propagiert dies seit Jahren. Heraus kommen mitunter übermäßig ausführliche Konstruktionen wie if (typeof value === 'string'). Diese selbst auferlegten Regeln sollen vermeiden, dass man sich mit den Fallstricken von Typen und Typumwandlung auseinandersetzen muss und sie beim Programmieren ständig im Kopf behalten muss. Sie sollen Programmierern mit unterschiedlichem Erfahrungsstand ermöglichen, gemeinsam fehlerfreien Code zu schreiben.

Der entstehende ausführliche Code ist jedoch nicht unbedingt robuster und besser lesbar. Ich halte es für sinnvoller, das Typsystem von JavaScript sowie das Verhalten von Operatoren und deren Coercion zu verstehen. Mit diesem fortgeschrittenen Wissen lassen sich 90% der Fälle sehr einfach und robust umsetzen, während man bei den restlichen haarigen 10% Mehrdeutigkeiten durch zugeschnittene Abfragen vermeiden kann. Die Regeln von ECMAScript sind zwar umfangreich, aber letztlich eindeutig und klar. Mittlerweile gibt es gute Sekundärliteratur, Überblickartikel und Werkzeuge, die beim Erlernen und Anwenden assistieren.

Die Überarbeitung des Artikels legt daher einen Schwerpunkt darauf, wie man Coercion in Objektabfragen sinnvoll nutzen kann. Besonders in Objektabfragen kann man sich die schwache Typisierung zunutze machen. So ist etwa die Abfrage auf »Truthyness« mit if (value), welche den Wert in einen Boolean umwandeln und mit true vergleicht, bereits sehr vielseitig.