Szukaj…
Zasady automatycznego wstawiania średnika
Istnieją trzy podstawowe zasady wstawiania średnika:
- 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
}
.
- 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.- 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 jedenLineTerminator
, 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.