Opcjonalne ?.
łączenie łańcuchowe i zerowe łączenie??
Możesz teraz bezpośrednio użyć ?.
inline, aby bezpiecznie przetestować istnienie. Obsługują ją wszystkie nowoczesne przeglądarki.
??
można użyć do ustawienia wartości domyślnej, jeśli jest ona niezdefiniowana lub zerowa.
aThing = possiblyNull ?? aThing
aThing = a?.b?.c ?? possiblyNullFallback ?? aThing
Jeśli właściwość istnieje, ?.
przechodzi do następnego sprawdzenia lub zwraca prawidłową wartość. Każda awaria spowoduje natychmiastowe zwarcie i powrót 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
Aby zapewnić domyślną zdefiniowaną wartość, możesz użyć ??
. Jeśli potrzebujesz pierwszej prawdziwej wartości, możesz użyć ||
.
example?.c ?? "c" // "c"
example?.c || "c" // "c"
example?.a?.[2] ?? 2 // false
example?.a?.[2] || 2 // 2
Jeśli nie zaznaczysz przypadku, właściwość po lewej stronie musi istnieć. Jeśli nie, zgłosi wyjątek.
example?.First // undefined
example?.First.Second // Uncaught TypeError: Cannot read property 'Second' of undefined
?.
Obsługa przeglądarek - 78%, lipiec 2020 r
??
Obsługa przeglądarek - 78%
Dokumentacja Mozilli
-
Logiczne przypisanie zerowe, rozwiązanie 2020+
Obecnie do przeglądarek dodaje się nowych operatorów ??=
, ||=
i &&=
. Nie robią dokładnie tego, czego szukasz, ale mogą prowadzić do tego samego wyniku w zależności od celu twojego kodu.
UWAGA: To nie są powszechne w wersji przeglądarek publicznych jeszcze , ale powinna również transpile Babel. Zaktualizuje się wraz ze zmianą dostępności.
??=
sprawdza, czy lewa strona jest niezdefiniowana lub zerowa, przerywając, jeśli jest już zdefiniowana. Jeśli nie, lewej stronie przypisywana jest wartość prawej strony. ||=
i &&=
są podobne, ale oparte na operatorach ||
i &&
.
Podstawowe przykłady
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
Przykłady obiektów / tablic
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" }
Wsparcie przeglądarek lipiec 2020 - 0,03%
Dokumentacja Mozilli
if( obj?.nested?.property?.value )
zamiastif( obj && obj.nested && obj.nested.property && obj.nested.property.value )