Start · Sprachen · JavaScript · Referenz · Logical OR Zuweisung (||=)

Logical OR Zuweisung (||=)

Operator

Weist den rechten Operanden nur dann dem linken zu, wenn der linke Operand <code>falsy</code> ist (Logical OR Assignment).

seit JavaScript ES2021 Kategorie: syntax

Signatur

x ||= y

Beschreibung

Der Logical OR Assignment Operator (||=) kombiniert die logische ODER-Verknüpfung mit einer Zuweisung. Der Ausdruck x ||= y entspricht konzeptionell x || (x = y): Der rechte Operand y wird nur dann ausgewertet und zugewiesen, wenn x einen falsy Wert hat. Als falsy gelten in JavaScript: false, 0, -0, 0n, "", null, undefined und NaN.

Der Operator eignet sich besonders gut als kompakter Standardwert-Setter: Soll eine Variable nur dann einen neuen Wert erhalten, wenn sie noch nicht (oder mit einem leeren/unwahren Wert) belegt ist, ersetzt ||= das umständlichere if-Konstrukt. Im Gegensatz zu einer einfachen ||-Verknüpfung mit Zuweisung (x = x || y) schreibt ||= nur dann tatsächlich in die Variable, wenn die Zuweisung auch nötig ist – das vermeidet unnötige Setter-Aufrufe bei Objekteigenschaften.

Zu unterscheiden ist ||= vom Nullish Coalescing Assignment (??=), der ausschließlich bei null oder undefined zuweist, sowie vom Logical AND Assignment (&&=), der bei truthy-Werten zuweist. Wer beispielsweise 0 oder "" als gültige Werte betrachtet, sollte ??= bevorzugen.

  • Kurzschlussauswertung: Ist x truthy, wird die rechte Seite überhaupt nicht ausgewertet.
  • Kein unbedingtes Schreiben: Die Zuweisung findet nur statt, wenn x falsy ist – Setter in Klassen oder Proxies werden somit nicht unnötig getriggert.
  • Chainbar: Wie alle Zuweisungsoperatoren gibt ||= den (ggf. neu gesetzten) Wert von x zurück und kann in Ausdrücken verwendet werden.

Parameter

Name Typ Default Beschreibung
$x Pflicht any Der linke Operand – eine gültige Zuweisung-Zielgröße (Variable, Objekteigenschaft, Array-Element). Ist x falsy, wird der Wert von y zugewiesen.
$y Pflicht any Der rechte Operand – ein beliebiger Ausdruck. Er wird nur ausgewertet, wenn x falsy ist (Kurzschlussauswertung).

Rückgabewert

Typ
any
Beschreibung
Der Wert von x nach der (ggf. durchgeführten) Zuweisung – also entweder der ursprüngliche truthy-Wert von x oder der neu zugewiesene Wert y.

Beispiele

Standardwert für eine Variable setzen

let username = "";
username ||= "Gast";
console.log(username);

let language = "de";
language ||= "en";
console.log(language);
Gast de

Standardwert für Objekteigenschaft setzen

const config = {
  timeout: 0,
  retries: 3,
};

// timeout ist 0 (falsy) → wird überschrieben
config.timeout ||= 5000;
// retries ist 3 (truthy) → bleibt unverändert
config.retries ||= 10;

console.log(config.timeout);  // 5000
console.log(config.retries);  // 3
5000 3

Kurzschlussauswertung – Seiteneffekte vermeiden

const getDefault = () => {
  console.log("Seiteneffekt: Standardwert berechnet");
  return 42;
};

let a = 10;
a ||= getDefault(); // getDefault() wird NICHT aufgerufen
console.log(a);

let b = 0;
b ||= getDefault(); // getDefault() wird aufgerufen
console.log(b);
10 Seiteneffekt: Standardwert berechnet 42

Vergleich mit ??= bei legitimen falsy-Werten

const settings = { volume: 0 };

// ||= überschreibt 0, weil 0 falsy ist – oft NICHT gewollt!
settings.volume ||= 50;
console.log(settings.volume); // 50 ← unerwünschtes Ergebnis

// ??= überschreibt nur null/undefined – hier die bessere Wahl
const settings2 = { volume: 0 };
settings2.volume ??= 50;
console.log(settings2.volume); // 0 ← korrekt
50 0

// Wichtig · Fallstricke

Browser-Kompatibilität: ||= ist seit ES2021 Teil des Standards und wird von allen modernen Browsern sowie Node.js ab Version 15 nativ unterstützt. Für ältere Zielumgebungen ist ein Transpiler wie Babel notwendig (Plugin: @babel/plugin-proposal-logical-assignment-operators).

Häufiger Fallstrick: ||= reagiert auf alle falsy-Werte, nicht nur auf null oder undefined. Zahlen wie 0 oder leere Zeichenketten "" können durchaus gültige Anwendungsdaten sein. In solchen Fällen sollte stattdessen ??= (Nullish Coalescing Assignment) verwendet werden, um unbeabsichtigte Überschreibungen zu verhindern.

Kein unbedingtes Schreiben: Im Gegensatz zu x = x || y führt x ||= y die Zuweisung nur durch, wenn sie tatsächlich nötig ist. Das ist relevant bei Objekten mit definierten Settern oder Proxy-Traps, die bei jeder Zuweisung ausgelöst werden würden.

Siehe auch