Signatur
Beschreibung
Der logische ODER-Operator (||) wertet zwei Operanden aus und gibt einen davon zurück. Er arbeitet nach dem Prinzip der Kurzschlussauswertung (Short-Circuit Evaluation): Ist der linke Operand truthy, wird er sofort zurückgegeben und der rechte Operand wird gar nicht ausgewertet. Nur wenn der linke Operand falsy ist (false, 0, "", null, undefined, NaN), wird der rechte Operand ausgewertet und zurückgegeben.
Wichtig: || gibt nicht zwingend einen booleschen Wert zurück, sondern den Wert eines der Operanden – so wie er ist. Das macht ihn nützlich für Standardwerte-Muster, etwa const name = userInput || "Gast". Soll jedoch der Wert 0, "" oder false als gültig gelten, ist der Nullish-Coalescing-Operator (??) die bessere Wahl.
In booleschen Kontexten (z. B. if-Bedingungen) verhält sich || wie die klassische logische Disjunktion: Das Ergebnis ist true, wenn mindestens einer der Operanden truthy ist. Der Operator kann auch verkettet werden (a || b || c), wobei von links nach rechts ausgewertet wird und beim ersten truthy Wert abgebrochen wird.
- Falsy-Werte:
false,0,-0,0n,"",null,undefined,NaN - Truthy-Werte: Alles andere, also z. B.
1,"hallo",[],{}
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $leftExpr Pflicht | any | — | Der linke Operand. Wird zuerst ausgewertet. Ist er truthy, wird er als Ergebnis zurückgegeben (Kurzschluss). |
| $rightExpr Pflicht | any | — | Der rechte Operand. Wird nur ausgewertet, wenn leftExpr falsy ist. |
Rückgabewert
leftExpr, wenn dieser truthy ist, andernfalls den Wert von rightExpr. Der zurückgegebene Wert ist nicht automatisch ein boolescher Wert.Beispiele
Grundlegende boolesche Auswertung
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
console.log(true || true); // true
Standardwert-Muster (Fallback)
const getUserName = (input) => input || "Gast";
console.log(getUserName("Anna")); // "Anna"
console.log(getUserName("")); // "Gast" (leerer String ist falsy)
console.log(getUserName(null)); // "Gast"
console.log(getUserName(undefined)); // "Gast"
Kurzschlussauswertung – Seiteneffekte vermeiden
let counter = 0;
const increment = () => ++counter;
// Linker Operand ist truthy → rechter wird NICHT aufgerufen
const result = "vorhanden" || increment();
console.log(result); // "vorhanden"
console.log(counter); // 0 — increment() wurde nie aufgerufen
// Linker Operand ist falsy → rechter WIRD aufgerufen
const result2 = "" || increment();
console.log(result2); // 1
console.log(counter); // 1
Vergleich mit ?? (Nullish Coalescing)
const lautstärke = 0;
// || behandelt 0 als falsy → Fallback wird verwendet
const mitOder = lautstärke || 50;
console.log(mitOder); // 50 ← unerwünschtes Verhalten!
// ?? reagiert nur auf null/undefined → 0 bleibt erhalten
const mitNullish = lautstärke ?? 50;
console.log(mitNullish); // 0 ← korrekt
// Wichtig · Fallstricke
Fallstrick – falsy Werte als gültige Eingaben: Da || auf alle falsy Werte reagiert (also auch 0, "", false), kann es zu unerwünschten Fallbacks kommen. Wenn nur null oder undefined einen Fallback auslösen sollen, ist der ??-Operator die richtige Wahl (verfügbar ab ES2020).
Zuweisung mit ||=: Der Logical OR Assignment-Operator ||= (ES2021) kombiniert || mit einer Zuweisung: a ||= b ist äquivalent zu a || (a = b) — weist also nur zu, wenn a falsy ist.
Vorrang (Operator Precedence): || hat einen niedrigeren Vorrang als die meisten anderen Operatoren (z. B. &&, Vergleichsoperatoren), aber einen höheren als der Kommaoperator. Bei gemischten logischen Ausdrücken empfiehlt es sich, Klammern zu setzen, um die Lesbarkeit zu verbessern und Fehler zu vermeiden: (a && b) || c.