2016-12-30 3 views
0

Ich lerne JS und irgendwie habe ich herausgefunden, dass ich die Eingabe ; am Ende einer Zeile überspringen kann, solange es nur eine Anweisung in dieser Zeile gibt. Tatsächlich bin ich daran gewöhnt; Ich habe mit Swift eine einfache iOS-App entwickelt, die auch diese Syntax unterstützt.Darf ich jedes Semikolon am Ende der Zeile in jeder Version (falls vorhanden) von Javascript weglassen?

Aber ich frage mich, ob es eine bestimmte Version oder etwas von JS gibt, die es Programmierern nicht erlaubt, das letzte Semikolon wegzulassen. Viele Sprachen hatten Änderungen in der Syntax; Ich denke also, Javascript könnte diese Art von Problem haben. Kann jemand diese Frage beantworten? Vielen Dank!

+0

JavaScript wird die Semikola für Sie nach den Regeln der automatischen Semicolon Insertion (ASI) – elclanrs

+0

Und afaik, die "immer" der Fall war. –

+0

Für besser oder schlechter ist es ein Teil der Sprache und wird wahrscheinlich nicht verschwinden. Es wäre schön, einen Ausstieg zu haben (ähnlich wie im strikten Modus), aber so wie es aussieht, muss jeder standardkonforme Interpreter dies unterstützen. – PMV

Antwort

2

Beachten Sie, dass während alle Versionen von JavaScript ASI unterstützen, es gibt Fallstricke von ASI, die bedeutet, dass Sie alle Semikolons nicht loswerden können.

Zum Beispiel wird im Folgenden nicht funktioniert, wie Sie es vielleicht erwarten:

function foo() { return [2, 3] } 

var x, y, i, j 
j = 2 
i = j 
[x,y] = foo() 

Sie vielleicht erwarten, dass i, j und x gleich 2, und y wird 3 gleich, was was ist, wenn passiert, ist Jede Zeile war mit Semikolon abgeschlossen. Dies ist jedoch nicht der Fall.

In der Tat, i ist [2,3], während x und yundefined sind. Wenn ASI auf diesem Abschnitt des Codes lief, interpretiert er die letzten beiden Zeilen als Eigenschaft Zugang:

i = j[x,y] = foo() 

, während es wahrscheinlich beabsichtigt eine Destrukturierung Betrieb zu sein:

i = j; 
[x,y] = foo(); 

Verfahren zu umgehen Das heißt, vor jeder mit [] oder() beginnenden Zeile, die nicht als Fortsetzung der vorherigen Anweisung behandelt werden soll, "defensive Strichpunkte" zu verwenden.

Verwandte Themen