Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 121
5.2Zusammengesetzte und leere Anweisungen
ОглавлениеWährend der Kommaoperator (siehe 4.13.7) mehrere Ausdrücke zu einem einzigen Ausdruck zusammenfasst, so kombiniert ein Anweisungsblock mehrere Anweisungen zu einer einzigen zusammengesetzten Anweisung. Ein Anweisungsblock ist einfach eine Folge von Anweisungen, die in geschweifte Klammern eingeschlossen ist. Die folgenden Zeilen verhalten sich also wie eine einzige Anweisung und können überall dort verwendet werden, wo JavaScript eine einzelne Anweisung erwartet:
{
x = Math.PI;
cx = Math.cos(x);
console.log("cos(?) = " + cx);
}
An diesem Anweisungsblock sind einige Dinge auffällig. Erstens: Er endet nicht mit einem Semikolon. Zwar werden die einzelnen Anweisungen im Block mit Semikola abgeschlossen, der Block selbst aber nicht. Zweitens: Die Zeilen innerhalb des Blocks sind im Verhältnis zu den umschließenden geschweiften Klammern eingerückt. Das ist nicht zwingend vorgeschrieben, verbessert aber die Lesbarkeit und Verständlichkeit des Codes.
So wie Ausdrücke häufig Unterausdrücke enthalten, so enthalten Anweisungen häufig Unteranweisungen. Formal gestattet die JavaScript-Syntax in der Regel nur eine einzige Unteranweisung. Beispielsweise erlaubt die Syntax der while-Schleife lediglich eine einzige Anweisung als Schleifeninhalt. Mit einem Anweisungsblock können Sie aber eine beliebige Anzahl von Anweisungen innerhalb dieser einzigen erlaubten Unteranweisung platzieren.
Eine zusammengesetzte Anweisung ermöglicht Ihnen, mehrere Anweisungen an Stellen zu verwenden, an denen JavaScript eine einzelne Anweisung erwartet. Die leere Anweisung ist genau das Gegenteil: Sie ermöglicht Ihnen, dort auf eine Anweisung zu verzichten, wo eigentlich eine erwartet wird. Die leere Anweisung sieht so aus:
;
Wenn er eine leere Anweisung ausführt, bleibt der JavaScript-Interpreter ansonsten einfach untätig. Eine leere Anweisung kann manchmal nützlich sein, wenn Sie eine Schleife ohne Inhalt erstellen wollen. Betrachten Sie die folgende for-Schleife (die wir in 5.4.3 behandeln werden):
// Ein Array a initialisieren.
for (let i = 0; i < a.length; a[i++] = 0) ;
In dieser Schleife erfolgt die gesamte Arbeit durch den Ausdruck a[i++] = 0, weiterer Schleifeninhalt ist deswegen nicht erforderlich. Die JavaScript-Syntax verlangt jedoch eine Anweisung als Schleifentext, sodass hier einfach eine leere Anweisung – realisiert durch das abschließende »einsame« Semikolon – verwendet wird.
Beachten Sie bitte, dass ein Semikolon, das Sie versehentlich nach der schließenden runden Klammer einer for-Schleife, einer while-Schleife oder einer if-Anweisung einfügen, zu frustrierenden und schwer aufzuspürenden Fehlern führen kann. Beispielsweise macht der folgende Code wahrscheinlich nicht das, was der Autor beabsichtigt:
if ((a === 0) || (b === 0)); // Oje! Diese Zeile tut ja gar nichts …
o = null; //… während diese immer ausgeführt wird.
Wenn Sie mit Absicht eine leere Anweisung verwenden, ist es empfehlenswert, das in einem Kommentar klarzustellen und zu dokumentieren, damit man selbst oder jemand anderer es später nicht für einen Fehler hält, zum Beispiel:
for(let i = 0; i < a.length; a[i++] = 0) /* leere Anweisung! */ ;