Logische Operatoren
In React entscheidest du oft zur Laufzeit, was angezeigt wird. Dafür brauchst du zwei Dinge: ein Verständnis davon, was JavaScript als „wahr” oder „falsch” betrachtet, und die Operatoren, die darauf aufbauen.
Truthy und Falsy
Abschnitt betitelt „Truthy und Falsy“JavaScript unterscheidet nicht nur zwischen true und false. Jeder Wert ist entweder truthy (wird in einem booleschen Kontext als wahr behandelt) oder falsy (als falsch).
Es gibt genau 8 falsy Werte:
| Wert | Typ |
|---|---|
false | Boolean |
0 | Number |
-0 | Number |
0n | BigInt |
"" | String (leerer String) |
null | Null |
undefined | Undefined |
NaN | Number |
Alles andere ist truthy — auch Werte, die überraschen können:
Boolean("0"); // true — ein nicht-leerer String!Boolean([]); // true — ein leeres Array!Boolean({}); // true — ein leeres Objekt!Boolean("false"); // true — der String "false" ist nicht false!Ternary-Operator
Abschnitt betitelt „Ternary-Operator“Der Ternary-Operator ? : ist ein Ausdruck — er gibt einen von zwei Werten zurück:
const status = alter >= 18 ? "volljährig" : "minderjährig";Das ist die kompakte Form von:
let status;if (alter >= 18) { status = "volljährig";} else { status = "minderjährig";}In React ist der Ternary ideal für Entweder-Oder-Situationen:
function LoginStatus({ isLoggedIn }) { return ( <div> {isLoggedIn ? <p>Willkommen zurück!</p> : <p>Bitte einloggen.</p>} </div> );}Ternaries lassen sich verschachteln, werden aber schnell unlesbar:
// Schwer zu lesen — besser vermeiden{role === "admin" ? <AdminPanel /> : role === "user" ? <UserDashboard /> : <LoginPage />}Logisches UND (&&)
Abschnitt betitelt „Logisches UND (&&)“Der &&-Operator wertet von links nach rechts aus und nutzt Short-Circuit-Evaluation: Sobald ein Operand falsy ist, wird er sofort zurückgegeben — der Rest wird gar nicht mehr ausgewertet. Sind alle Operanden truthy, wird der letzte zurückgegeben:
"Hallo" && "Welt" // "Welt" (beide truthy → wertet bis zum Ende aus)"" && "Welt" // "" (falsy → bricht sofort ab, "Welt" wird nie erreicht)null && "Welt" // nulltrue && "Hallo" // "Hallo"false && "Hallo" // falseIn React bedeutet das: Zeige etwas nur, wenn die Bedingung erfüllt ist:
function Benachrichtigung({ nachricht }) { return ( <div> <h1>Dashboard</h1> {nachricht && <p className="alert">{nachricht}</p>} </div> );}Wenn nachricht ein nicht-leerer String ist (truthy), wird das <p> gerendert. Wenn nachricht null, undefined oder "" ist (falsy), bricht && sofort ab und das <p> wird nie ausgewertet.
Logisches ODER (||)
Abschnitt betitelt „Logisches ODER (||)“Der ||-Operator ist das Gegenstück zu && — auch er nutzt Short-Circuit-Evaluation, aber in die andere Richtung: Sobald ein Operand truthy ist, wird er sofort zurückgegeben. Sind alle Operanden falsy, wird der letzte zurückgegeben:
"Hallo" || "Fallback" // "Hallo" (truthy → bricht sofort ab)"" || "Fallback" // "Fallback" (falsy → weiter zum nächsten)null || "Fallback" // "Fallback"0 || 42 // 42Typischer Einsatz: Standardwerte setzen:
function Greeting({ name }) { return <h1>Hallo {name || "Gast"}!</h1>;}
// <Greeting name="Dan" /> → "Hallo Dan!"// <Greeting /> → "Hallo Gast!"Nullish Coalescing (??)
Abschnitt betitelt „Nullish Coalescing (??)“Der ??-Operator gibt den rechten Wert nur dann zurück, wenn der linke null oder undefined ist — nicht bei anderen falsy Werten:
0 ?? 42 // 0 (0 ist nicht null/undefined)"" ?? "Fallback" // "" (leerer String ist nicht null/undefined)null ?? 42 // 42undefined ?? 42 // 42Vergleich mit ||:
const anzahl = 0;
anzahl || 10; // 10 — 0 wird als falsy übersprungenanzahl ?? 10; // 0 — 0 wird behalten, nur null/undefined triggern den FallbackIn React ist ?? der präzisere Operator für Standardwerte:
function Score({ punkte }) { return <p>Punkte: {punkte ?? "Nicht bewertet"}</p>;}
// <Score punkte={0} /> → "Punkte: 0" (0 ist ein gültiger Wert)// <Score /> → "Punkte: Nicht bewertet"Optional Chaining (?.)
Abschnitt betitelt „Optional Chaining (?.)“Der ?.-Operator bricht eine Kette von Zugriffen ab, wenn ein Wert null oder undefined ist — statt einen Fehler zu werfen:
const student = { name: "Dan", adresse: { stadt: "Berlin", },};
student.adresse.stadt // "Berlin"student.adresse.plz // undefinedstudent.kontakt?.email // undefined (statt TypeError)student.kontakt.email // TypeError: Cannot read properties of undefinedOhne ?. müsstest du jeden Zwischenschritt prüfen:
// Ohne Optional Chainingconst email = student.kontakt && student.kontakt.email;
// Mit Optional Chainingconst email = student.kontakt?.email;Das funktioniert auch mit Methoden und Array-Zugriffen:
student.getName?.() // ruft getName auf, falls vorhandenstudent.kurse?.[0] // erstes Element, falls kurse existiertIn React ist Optional Chaining besonders nützlich bei API-Daten, die noch nicht geladen sind:
function StudentProfil({ student }) { return ( <div> <h2>{student?.name ?? "Lädt..."}</h2> <p>{student?.adresse?.stadt ?? "Unbekannt"}</p> </div> );}Kombination der Operatoren
Abschnitt betitelt „Kombination der Operatoren“Die Operatoren lassen sich kombinieren, um komplexe Bedingungen kompakt auszudrücken:
function StudentCard({ student }) { return ( <div> <h2>{student?.name ?? "Unbekannt"}</h2> {student?.fach && <p>Fach: {student.fach}</p>} <p>Semester: {student?.semester ?? "k.A."}</p> <p>Status: {student?.aktiv ? "Aktiv" : "Inaktiv"}</p> </div> );}| Muster | Bedeutung |
|---|---|
wert?.eigenschaft | Sicherer Zugriff auf verschachtelte Daten |
wert ?? fallback | Standardwert nur bei null/undefined |
wert || fallback | Standardwert bei jedem falsy Wert |
bedingung && <JSX /> | Zeige JSX nur wenn Bedingung truthy |
bedingung ? <A /> : <B /> | Zeige A oder B je nach Bedingung |