Start · Sprachen · JavaScript · Referenz · Logisches ODER (||)

Logisches ODER (||)

Operator

Der logische ODER-Operator <code>||</code> gibt den ersten <em>truthy</em> Operanden zurück – oder den letzten, wenn keiner truthy ist.

seit JavaScript ES1 Kategorie: syntax

Signatur

leftExpr || rightExpr

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

Typ
any
Beschreibung
Den Wert von 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
true true false 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"
Anna Gast Gast 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
vorhanden 0 1 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
50 0

// 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.