JavaScript/Operatoren/Nullish Coalescing Operator

Aus SELFHTML-Wiki
< JavaScript‎ | Operatoren(Weitergeleitet von ?? Operator)
Wechseln zu: Navigation, Suche

Der nullish coalescing Operator (??) ist ein binärer Operator, der den Wert des linken Operanden zurückgibt, wenn dieser weder null noch undefined ist. Sonst wird der Wert des rechten Operanden zurückgegeben.

Beispiel
let a = null  ?? 'default value'
let b = false ?? 'default value'

console.log(a) // default value
console.log(b) // false


Beschreibung

Der nullish coalescing Operator funktioniert ähnlich wie der Operator für das logische ODER (||). Der wesentliche Unterschied besteht darin, dass der Wert des rechten Operanden nicht dann zurückgegeben wird, wenn der linke Operand falsy ist, sondern nur dann, wenn er nullish ist, das heißt, entweder null oder undefined.

Beispiel
let x, n = 0

console.log((x ?? 5) + (n ?? 3)) // 5

In dem Beispiel oben wird die Variable x deklariert, aber nicht initialisiert, mit der Folge, dass x implizit der Wert undefined zugewiesen wird. Der Variable n wird hingegen explizit der Wert 0 zugewiesen, der falsy ist, also bei Anwendung eines logischen Operators in den Wert false konvertiert werden würde.

  • Da der Wert undefined nullish ist, wird der Ausdruck x ?? 5 zu 5 aufgelöst.
  • Die Auswertung des Ausdrucks n ?? 3 ergibt hingegen 0, da der Wert von n zwar falsy, aber nicht nullish ist.


Short-circuit Auswertung

Analog zu den Operatoren für das logische ODER (||) und das logische UND (&&), wird beim nullish coalescing Operator der Teilausdruck für den rechten Operanden nur dann ausgewertet, wenn der Wert des linken Operanden nullish ist.

Beispiel
let n = 0

n ?? (n = 5)

console.log(n) // 0

Da der Wert der Variable n im obigen Beispiel werder null noch undefined ist, wird der Zuweisungsausdruck auf der rechten Seite nicht ausgewertet.


Zuweisung

Für den Ausdruck aus dem letzten Beispiel gibt es eine Kurzschreibweise. Wenn ein Wert nur dann zugewiesen werden soll, wenn die Variable nicht definiert oder nur mit dem Platzhalter null versehen ist, dann kann der nullish coalescing assignment Operator (??=) verwendet werden.

Beispiel
const point = {
    x: null,
    y: 0
}

point.x ??= 1
point.y ??= 1

console.log(point) // {x: 1, y: 0}

Dies vereinfacht Ausdrücke der Form A = A || B, mit der zusätzlichen Absicherung, dass valide Werte, die in einem booleschen Kontext zu false auswerten, nicht überschrieben werden.