Czasami zdarza się, że musimy skorzystać z kilku zagnieżdżeń obiektów. Aby ustrzec się błędów wykonania, należy sprawdzić czy każdy zagnieżdżony obiekt istnieje:
if(!!a && !!a.b && !!a.b.c && !!a.b.c.d){
console.log(a.b.c.d);
}Bardziej zwięzłe rozwiązanie – Optional Chaining
Dzięki rozwiązniu Optional Chaining, możliwe jest korzystanie z zagnieżdżonych obiektów w łatwy sposób – nie ma potrzeby sprawdzania czy kolejne zagnieżdżenia istnieją. Jeśli któreś z zagnieżdżeń nie istnieje (jest równe null lub undefined) to całość zwróci wartość undefined. Aby skorzystać z Optional Chaining należy oprócz kropki użyć dodatkowo znaku zapytania:
console.log(a?.b?.c?.d);Operator lewostronny
Warto tutaj wspomnieć, że jest to operator lewostronny – sprawdza czy wartość po jego lewej stronie jest różna od null i różna od undefined. Aczkolwiek wartość po prawej stronie też musi istnieć:
PROPERTY_CHECKED?.PROPERTY_OF_PROPERTY_CHECKED
Poprawne:
a?.b
Niepoprawne:
a?.b?
Optional Chaining w wywoływaniu metod
Dodatkowo Optional Chaining można wykorzystać przy wywoływaniu metod:
obj.run?.()
W takiej sytuacji operator sprawdza czy metoda run istnieje w obiekcie obj. Jeśli tak nie jest to standardowo zwracany jest undefined.
ES2020
Funkcjonalność ta została wprowadzona w EcmaScript 2020.
Warto zajrzeć
1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
