Javascript wrażliwy na ekstra białe znaki?

0

WTF który zaliczyłem przed chwilą – coś takiego nie działa:

function wtf()
        {
                return
                        2 === 5 ?
                        "NAY" :
                        "AYE";
        }

Pewnie znów mnie zlinczujecie, ale w C / C++ przyzwyczaiłem się tak formatować kod, jak miałem pod return jakieś długaśne wyrażenie. I tam działało świetnie.

A JS zwraca Undefined i jeszcze pluje ostrzeżeniem, że 2 === 5 ? jest unreachable code.

Jaka reguła parsowania białych znaków za to odpowiada? Na jakie jeszcze różnice w obsłudze białych znaków między JS a C/C++ powinienem być wrażliwy?

No i, czy da się jakoś zmusić JS do uznania, że to 2 === 5 ? to jest kontynuacja return statement a nie jakieś zupełnie nowe statement, żebym mógł formatować kod po swojemu ?

1

Biała linia w JSie jest afair równoznaczna z postawieniem średnika, zatem masz tam tak naprawdę return;, po którym reszta kodu jest unreachable.

0

Biała linia to średnik? Zatem czemu to działa?

function wtf()
        function wtf()
        {
                return 2 === 5 ? "NAY" :
                        "AYE";
        }

Jak biała linia to średnik, to tu powino być tak naprawdę return 2 === 5 ? "NAY" :; a więc znowu Undefined a nie jest bo jest "AYE".

0

Nie każda linia to na pałę średnik - ale dla porównania:

function test() {
  const x = 'test'
  alert(x)
}
1

W JS teoretycznie ; są opcjonalne w praktyce są wstawiane wg tam odpowiednich reguł. W praktyce twój kod wygląda tak:

function wtf()
        {
                return;
                        2 === 5 ?
                        "NAY" :
                        "AYE";
        }

Także funkcja zwraca undefined czyli poprawnie a dalszy kod jest nieosiągalny bo jest po returnie.
Możesz opakować to w nawiasy wtedy zadziała.

0

@kmph: JS nie wstawia średników w trakcie wyrażenia tylko tam gdzie jest to syntaktycznie poprawne.

0

Opakować w nawiasy? Jak? To nie działa:

function wtf()
        {
                (return
                        2 === 5 ?
                        "NAY" :
                        "AYE");
        }

A jeśli średniki są opcjonalne... TO czemu coding standards takich JSHintów i innych podobnych je wymagają?

0

po prostu zrób return na tej samej linii:

 return  2 === 5 ?
           "NAY" :
            "AYE";
        
2
function example() {
  return (
    // something
  )
}

coding standards takich JSHintów i innych podobnych je wymagają?

Bo tak sobie te "standardy" założyły, są też inne, nie wymagające średników, również poprawne, np. https://standardjs.com/

1 użytkowników online, w tym zalogowanych: 0, gości: 1