Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 123
5.3.1if
ОглавлениеDie if-Anweisung ist die grundlegende Kontrollanweisung, die es JavaScript ermöglicht, Entscheidungen zu treffen oder – präziser ausgedrückt – Anweisungen bedingt auszuführen. Diese Anweisung kennt zwei Formen. Die erste sieht so aus:
if (Ausdruck)
Anweisung
Bei dieser Variante wird zunächst der Ausdruck ausgewertet. Ist der resultierende Wert ein nicht-strikt wahrer Wert, wird die Anweisung ausgeführt. Ergibt der Ausdruck einen nicht-strikt falschen Wert, wird die Anweisung nicht ausgeführt. (Eine Definition der Begriffe nicht-strikt wahrer und nicht-strikt falscher Wert finden Sie in 3.4.) Ein Beispiel:
if (username == null) // Wenn der Benutzername null oder undefined ist,
username = "John Doe"; // legen Sie ihn fest.
Oder ganz ähnlich:
// Wenn der Benutzername null, undefined, false, 0, "" oder NaN ist,
// geben Sie ihm einen neuen Wert:
if (!username) username = "John Doe";
Beachten Sie, dass die Klammern um den Ausdruck ein erforderlicher Teil der Syntax der if-Anweisung sind.
Die JavaScript-Syntax verlangt, dass nach dem Schlüsselwort if und dem in Klammern eingefassten Ausdruck eine einzelne Anweisung folgt, aber man kann mehrere Anweisungen in einem Anweisungsblock zusammenfassen. Die if-Anweisung könnte also auch so aussehen:
if (!address) {
address = "";
message = "Please specify a mailing address.";
}
Die zweite Form der if-Anweisung führt eine else-Klausel ein, die ausgeführt wird, wenn der Ausdruck false ist. Die Syntax sieht so aus:
if (Ausdruck)
Anweisung_1
else
Anweisung_2
Diese Form der Anweisung führt Anweisung_1 aus, wenn der Ausdruck ein nichtstrikt wahrer Wert ist, und Anweisung_2, wenn der Ausdruck einen nicht-strikt falschen Wert ergibt, zum Beispiel:
if (n === 1)
console.log("You have 1 new message.");
else
console.log(`You have ${n} new messages.`);
Wenn Sie verschachtelte if-Anweisungen mit else-Klauseln verwenden, sollten Sie sicherstellen, dass die else-Klauseln den entsprechenden if-Anweisungen zugeordnet sind. Betrachten Sie die folgenden Zeilen:
i = j = 1;
k = 2;
if (i === j)
if (j === k)
console.log("i equals k");
else
console.log("i doesn't equal j"); // FALSCH!
In diesem Beispiel bildet die innere if-Anweisung die einzige Anweisung, die an dieser Stelle aufgrund der Syntax des äußeren if gestattet wird. Unglücklicherweise ist nicht klar, zu welchem if das else gehört – sieht man von dem Hinweis ab, der durch die Einrückung entsteht. Und im gezeigten Beispiel ist die Einrückung zudem falsch, weil ein JavaScript-Interpreter den Beispielcode tatsächlich so interpretiert:
if (i === j) {
if (j === k)
console.log("i equals k");
else
console.log("i doesn't equal j"); // HOPPLA!
}
Die Regeln von JavaScript besagen (wie in den meisten Programmiersprachen), dass eine else-Klausel standardmäßig zur nächstgelegenen if-Anweisung gehört. Sie sollten geschweifte Klammern einsetzen, um dieses Beispiel eindeutiger zu gestalten. Dann lässt sich der Code leichter lesen, verstehen, warten und debuggen:
if (i === j) {
if (j === k) {
console.log("i equals k");
}
} else { // Was für einen Unterschied die Position einer geschweiften
// Klammer macht!
console.log("i doesn't equal j");
}
Viele Programmierer schließen den Inhalt von if- und else-Anweisungen (und auch anderen zusammengesetzten Anweisungen wie while-Schleifen) grundsätzlich in geschweifte Klammern ein, auch wenn dieser Inhalt nur aus einer einzigen Anweisung besteht. Hält man sich konsequent daran, kann man die gerade demonstrierten Probleme vermeiden. Deshalb ich rate Ihnen, diese Praxis zu übernehmen! In diesem Buch ist es mir allerdings vor allem wichtig, den Beispielcode möglichst kurz zu halten, und ich muss gestehen, dass ich damit meinem eigenen Ratschlag hier selbst nicht folge.