Suche…


Regeln für das automatische Einfügen von Semikolons

Es gibt drei Grundregeln für das Einfügen von Semikolons:

  1. 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 Token LineTerminator .
  • Das beleidigende Token ist } .
  1. 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.
  2. 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 einen LineTerminator vom vorherigen Token LineTerminator . 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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow