Szukaj…


Zasady automatycznego wstawiania średnika

Istnieją trzy podstawowe zasady wstawiania średnika:

  1. Gdy podczas analizowania programu od lewej do prawej napotyka się token (zwany tokenem obrażającym ), który nie jest dozwolony przez żadną produkcję gramatyki, wówczas średnik jest wstawiany automatycznie przed tokenem naruszającym, jeśli jeden lub więcej z poniższych warunki są prawdziwe:
  • Obraźliwy token jest oddzielony od poprzedniego tokena przynajmniej jednym LineTerminator .
  • Tokenem obrażającym jest } .
  1. Gdy podczas analizowania programu od lewej do prawej napotyka się koniec strumienia wejściowego tokenów i analizator składni nie jest w stanie przeanalizować strumienia tokenu wejściowego jako pojedynczego kompletnego Program ECMAScript, wówczas średnik jest wstawiany automatycznie na końcu strumień wejściowy.
  2. Gdy podczas analizowania programu od lewej do prawej napotyka się token dozwolony przez pewną produkcję gramatyki, ale produkcja jest produkcją ograniczoną, a token byłby pierwszym tokenem terminala lub nieterminala bezpośrednio po adnotacji „ [tutaj nie ma LineTerminator ] ” w ramach ograniczonej produkcji (i dlatego taki token nazywa się ograniczonym tokenem), a ograniczony token jest oddzielany od poprzedniego tokena przez co najmniej jeden LineTerminator , następnie średnik jest wstawiany automatycznie przed ograniczonym tokenem .

Jednak w poprzednich regułach występuje dodatkowy warunek nadrzędny: średnik nigdy nie jest wstawiany automatycznie, jeśli średnik byłby wówczas analizowany jako pusta instrukcja lub jeśli ten średnik stałby się jednym z dwóch średników w nagłówku instrukcji for (patrz 12.6.3).

Źródło: ECMA-262, piąte wydanie ECMAScript Specyfikacja:

Oświadczenia, których dotyczy automatyczne wstawianie średnika

  • puste oświadczenie
  • instrukcja var
  • wyrażenie wyrażenia
  • instrukcja do-while
  • continue wyciąg
  • instrukcja break
  • instrukcja return
  • throw oświadczenie

Przykłady:

Gdy napotkany zostanie koniec strumienia wejściowego tokenów, a analizator składni nie będzie w stanie przeanalizować strumienia tokenu wejściowego jako pojedynczego kompletnego Programu, wówczas średnik zostanie automatycznie wstawiony na końcu strumienia wejściowego.

a = b
++c
// is transformed to:
a = b;
++c;
x
++
y
// is transformed to:
x;
++y;

Indeksowanie / literały tablicowe

console.log("Hello, World")
[1,2,3].join()
// is transformed to:
console.log("Hello, World")[(1, 2, 3)].join();

Oświadczenie zwrotne:

return 
  "something";
// is transformed to
return;
  "something";

Unikaj wstawiania średników w instrukcjach zwrotnych

Konwencja kodowania JavaScript polega na umieszczeniu początkowego nawiasu bloków w tym samym wierszu ich deklaracji:

if (...) {

}

function (a, b, ...) {

}

Zamiast w następnym wierszu:

if (...)
{

}

function (a, b, ...) 
{

}

Zostało to przyjęte, aby uniknąć wstawiania średnika w instrukcjach return zwracających obiekty:

function foo() 
{
    return // A semicolon will be inserted here, making the function return nothing
    {
        foo: 'foo'
    };
}

foo(); // undefined

function properFoo() {
    return {
        foo: 'foo'
    };
}

properFoo(); // { foo: 'foo' }

W większości języków umieszczenie nawiasu początkowego jest kwestią osobistych preferencji, ponieważ nie ma realnego wpływu na wykonanie kodu. W JavaScript, jak widzieliście, umieszczenie początkowego nawiasu w następnym wierszu może prowadzić do cichych błędów.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow