Przejdź do głównej zawartości

W przykładzie z błędem, 7 linia wyrzuci do konsoli SyntaxError.

Treść błędu może się różnić w zależności od kontekstu, w którym kod zostanie wywołany.

W przypadku przekazania kodu jako argument do console.log(), dostaniemy informację o brakującym domknięciu nawiasu na liście argumentów.

SyntaxError sprowadza się jednak do niedozwolonej składni w języku JavaScript. Po prostu nie możemy użyć danej konstrukcji.

I taką niedozwoloną konstrukcją jest użycie operatora ?? na równi z operatorami || lub &&.

Po prostu nie możemy tego robić, musimy użyć nawiasów dla wyraźnego zgrupowania wyrażeń, które chcemy aby zostały wykonane w pierwszej kolejności.

Dokumentacja JavaScript od Mozilli (MDN), tłumaczy, że jednoczesne użycie ?? w połączeniu z || lub && mogłoby wprowadzać w kodzie błędy wynikające z wystąpienia zwarcia (short circuiting).

Warto zauważyć, że tabela priorytetów wykonywania operatorów plasuje && wyżej niż ||, ale ze względu na efekt zwarcia, który jeśli wystąpi, totalnie ignoruje drugi operand, co również może prowadzić do błędów w kodzie związanych z oczekiwaniem wywołania funkcji w takim wyrażeniu.

Przykładowo, przy wyrażeniu true || alert("bar") && false zadziała zwarcie na wartości true i cały dalszy kod nie zostanie wykonany, mimo że priorytet wykonywania operatorów mógłby sugerować, że funkcja alert("bar") powinna zostać wykonana w celu ewaluacji wartości operatora &&.

W tym kontekście, wyrzucanie błędu składniowego w momencie równoległego użycia ?? z && lub || wydaje się być naciągane.