Signatur
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
xtruthy, wird die rechte Seite überhaupt nicht ausgewertet. - Kein unbedingtes Schreiben: Die Zuweisung findet nur statt, wenn
xfalsy ist – Setter in Klassen oder Proxies werden somit nicht unnötig getriggert. - Chainbar: Wie alle Zuweisungsoperatoren gibt
||=den (ggf. neu gesetzten) Wert vonxzurü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
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);
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
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);
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
// 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.