JavaScript/Anweisung/Automatische Semikolons

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Automatisch eingefügte Semikolons sind eine Eigenschaft des JavaScript-Parsers. Wenn er nach einem Zeilenumbruch auf ein }-Zeichen stößt oder auf ein Token, das auf Grund der Sprachsyntax an dieser Stelle nicht erwartet wird, dann fügt er vor dem Zeilenumbruch ein Semikolon ein. Das Ende des Quelltexts wird in diesem Zusammenhang übrigens ebenfalls als ein unerwartetes Token aufgefasst.

Darüber hinaus fügt der Parser Semikolons an den folgenden Stellen ein:

Es gibt Ausnahmen: Innerhalb der Klammern der for-Schleife werden keine Semikolons eingefügt, und wenn das Semikolon eine leere Anweisung erzeugen würde, wird ebenfalls keins eingefügt.

Eine weitere Ausnahme entsteht, wenn sich aus dem unerwarteten Token irgendwie syntaktisch gültiger Code herausdeuten lässt. Bei Mozilla findet man diese Beispiele:

Kein Semikolon
const a = 1
(1).toString()
Der Ausdruck 1(1) lässt sich so deuten, als wolle man die Zahl 1 als Funktion aufrufen. Dies ist inhaltlicher Unsinn, aber syntaktisch ist es richtig. Der Funktionsaufruf-Operator () erwartet laut Sprachdefinition irgendeinen Wert, auf den er angewendet wird. Ob dieser Wert eine Funktion ist, stellt sich erst im Moment der Ausführung heraus. Sie erhalten deshalb die Fehlermeldung 1 is not a function.
const b = 1
[1,2,3].forEach(console.log)
Hier lässt sich 1[1,2,3] als Zugriff auf eine Eigenschaft deuten. Der Inhalt der eckigen Klammern wird als Aneinanderreihungsoperator , verstanden, dessen Wert der letzte Operand der Aneinanderreihung ist, also 3. JavaScript möchte also die Eigenschaft "3" der Zahl 1 abrufen - die es nicht gibt, weshalb das Ergebnis undefined ist. Und weil undefined keine forEach-Methode kennt, erhalten Sie die Fehlermeldung Cannot read properties of undefined (reading 'forEach').

Der Sinn dieses merkwürdigen Verhaltens war, wegen eines vergessenen Semikolons nicht gleich das Programm abbrechen zu lassen. Der Programmtext sollte sinnvoll interpretiert werden. Bei all diesen Ausnahmen bleibt aber nur - frei nach Douglas Adams - eines zu sagen:

We apologise for the convenience
So Long, and Thanks for All the Quirks