Optionale Verkettung ?.
und Nullish Coalescing??
Sie können jetzt direkt ?.
Inline verwenden, um die Existenz sicher zu testen. Alle modernen Browser unterstützen dies.
??
kann verwendet werden, um einen Standardwert festzulegen, wenn undefiniert oder null.
aThing = possiblyNull ?? aThing
aThing = a?.b?.c ?? possiblyNullFallback ?? aThing
Wenn eine Eigenschaft vorhanden ist, fahren Sie ?.
mit der nächsten Prüfung fort oder geben Sie den gültigen Wert zurück. Jeder Fehler wird sofort kurzgeschlossen und kehrt zurück undefined
.
const example = {a: ["first", {b:3}, false]}
example?.a // ["first", {b:3}, false]
example?.b // undefined
example?.a?.[0] // "first"
example?.a?.[1]?.a // undefined
example?.a?.[1]?.b // 3
domElement?.parentElement?.children?.[3]?.nextElementSibling
null?.() // undefined
validFunction?.() // result
(() => {return 1})?.() // 1
Um einen standardmäßig definierten Wert sicherzustellen, können Sie verwenden ??
. Wenn Sie den ersten Wahrheitswert benötigen, können Sie verwenden ||
.
example?.c ?? "c" // "c"
example?.c || "c" // "c"
example?.a?.[2] ?? 2 // false
example?.a?.[2] || 2 // 2
Wenn Sie einen Fall nicht überprüfen, muss die Eigenschaft auf der linken Seite vorhanden sein. Wenn nicht, wird eine Ausnahme ausgelöst.
example?.First // undefined
example?.First.Second // Uncaught TypeError: Cannot read property 'Second' of undefined
?.
Browser-Unterstützung - 78%, Juli 2020
??
Browser-Unterstützung - 78%
Mozilla-Dokumentation
- -
Logische Nullzuweisung, 2020+ Lösung
Derzeit werden den Browsern neue Operatoren hinzugefügt ??=
, ||=
und &&=
. Sie tun nicht ganz das, wonach Sie suchen, können jedoch je nach Ziel Ihres Codes zu demselben Ergebnis führen.
HINWEIS: Diese sind in öffentlichen Browserversionen noch nicht üblich , aber Babel sollte sich gut transpilieren lassen. Wird aktualisiert, wenn sich die Verfügbarkeit ändert.
??=
prüft, ob die linke Seite undefiniert oder null ist, kurzgeschlossen, falls bereits definiert. Wenn nicht, wird der linken Seite der Wert für die rechte Seite zugewiesen. ||=
und &&=
sind ähnlich, basieren jedoch auf den Operatoren ||
und &&
.
Grundlegende Beispiele
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
Objekt- / Array-Beispiele
let x = ["foo"]
let y = { foo: "fizz" }
x[0] ??= "bar" // "foo"
x[1] ??= "bar" // "bar"
y.foo ??= "buzz" // "fizz"
y.bar ??= "buzz" // "buzz"
x // Array [ "foo", "bar" ]
y // Object { foo: "fizz", bar: "buzz" }
Browser-Unterstützung Juli 2020 - 0,03%
Mozilla-Dokumentation
if( obj?.nested?.property?.value )
anstelle vonif( obj && obj.nested && obj.nested.property && obj.nested.property.value )