Suche…
Regeln für das automatische Einfügen von Semikolons
Es gibt drei Grundregeln für das Einfügen von Semikolons:
- Wenn beim Parsing des Programms von links nach rechts ein Token (das als beleidigendes Token bezeichnet wird ) angetroffen wird, das bei keiner Grammatikproduktion zulässig ist, wird vor dem anstößigen Token automatisch ein Semikolon eingefügt, wenn einer oder mehrere der folgenden Werte vorliegt Bedingungen ist wahr:
- Das fehlerhafte Token ist durch mindestens einen
LineTerminator
vom vorherigen TokenLineTerminator
.- Das beleidigende Token ist
}
.
- Wenn beim Parsing des Programms von links nach rechts das Ende des Eingabestroms von Token gefunden wird und der Parser den Eingabedokensstrom nicht als einzelnes vollständiges ECMAScript-
Program
analysieren kann, wird am Ende von automatisch ein Semikolon eingefügt der Eingabestrom.- Wenn beim Parsen des Programms von links nach rechts ein Token angetroffen wird, das bei der Erstellung der Grammatik zulässig ist, die Produktion jedoch eine eingeschränkte Produktion ist und das Token das erste Token für ein Terminal oder ein Nichtterminal ist, das direkt auf die Anmerkung folgt " [Kein
LineTerminator
hier] " innerhalb der eingeschränkten Produktion (und daher wird ein solches Token als eingeschränktes Token bezeichnet), und das eingeschränkte Token wird durch mindestens einenLineTerminator
vom vorherigen TokenLineTerminator
. Anschließend wird vor dem eingeschränkten Token automatisch ein Semikolon eingefügt .Es gibt jedoch eine zusätzliche Überschreibungsbedingung für die vorhergehenden Regeln: Ein Semikolon wird niemals automatisch eingefügt, wenn das Semikolon als leere Anweisung analysiert wird oder wenn dieses Semikolon zu einem der beiden Semikolons in der Kopfzeile einer
for
Anweisung wird (siehe 12.6.3).
Quelle: ECMA-262, Fünfte Edition ECMAScript-Spezifikation:
Anweisungen, die von der automatischen Semikoloneinfügung betroffen sind
- leere Aussage
-
var
Anweisung - Ausdruck Anweisung
-
do-while
Anweisung -
continue
Aussage - Anweisung
break
-
return
Anweisung - Aussage
throw
Beispiele:
Wenn das Ende des Eingabe-Streams von Token gefunden wird und der Parser den Eingabe-Token-Stream nicht als einzelnes vollständiges Programm analysieren kann, wird am Ende des Eingabestroms automatisch ein Semikolon eingefügt.
a = b
++c
// is transformed to:
a = b;
++c;
x
++
y
// is transformed to:
x;
++y;
Array-Indizierung / Literale
console.log("Hello, World")
[1,2,3].join()
// is transformed to:
console.log("Hello, World")[(1, 2, 3)].join();
Rückgabeanweisung:
return
"something";
// is transformed to
return;
"something";
Vermeiden Sie das Einfügen von Semikolons in return-Anweisungen
Die JavaScript-Codierungskonvention besteht darin, die Startklammer von Blöcken in derselben Zeile ihrer Deklaration zu platzieren:
if (...) {
}
function (a, b, ...) {
}
Statt in der nächsten Zeile:
if (...)
{
}
function (a, b, ...)
{
}
Dies wurde angewendet, um das Einfügen von Semikolons in Rückgabeanweisungen zu vermeiden, die Objekte zurückgeben:
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' }
In den meisten Sprachen ist die Platzierung der Startklammer nur eine Frage der persönlichen Vorlieben, da sie keinen wirklichen Einfluss auf die Ausführung des Codes hat. Wie Sie gesehen haben, kann das Platzieren der ersten Klammer in der nächsten Zeile in JavaScript zu stillen Fehlern führen.