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 )