Sind Semikolons erforderlich, nachdem ein Objekt-literal Zuweisung in JavaScript?
Der folgende Beispielcode veranschaulicht ein Objekt-literal zugewiesen wird, aber ohne Semikolon danach:
var literal = {
say: function(msg) { alert(msg); }
}
literal.say("hello world!");
Scheint dies legal ist, und nicht eine Warnung ausgeben (zumindest in Firefox 3). Ist das komplett legal, oder gibt es eine strikte version von JavaScript, wo dies nicht erlaubt ist?
Frage ich mich insbesondere für die zukünftige Kompatibilitätsprobleme... ich würde gerne schreiben "richtigen" JavaScript, also, wenn technisch muss ich verwenden Sie das Semikolon, den würde ich gerne verwenden.
- Semikolons sind optional, aber Ihr code wird ungültig, wenn Sie führen Sie es durch ein JavaScript minimizer, wie der YUI Compressor. Daher ist es eine gute Praxis, immer ein Semikolon.
- Ich bin mir ziemlich sicher, dass eine Unterbrechung auf IE. Es mag zwar sein gültiges javascript, werden Sie wahrscheinlich Hinzugefügt haben, um das Semikolon, weil das sowieso nicht
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht technisch, JavaScript Semikolon als optionale in vielen Situationen.
Aber, als Allgemeine Regel gilt, verwenden Sie Sie am Ende jeder Anweisung. Warum? Denn wenn Sie jemals wollen, komprimieren Sie das Skript, es erspart Ihnen unzählige Stunden der frustration.
Automatic semicolon insertion erfolgt durch den interpreter, so dass Sie kann lasse Sie aus, wenn Sie so wählen. In den Kommentaren, jemand behauptet, dass
aber das ist falsch. Sie sind optional, was wirklich passiert ist, das Zeilenende-Zeichen betreffen die automatische Semikolon einführen; es ist ein feiner Unterschied.
Hier ist der rest von der standard-auf Semikolon einfügen:
Den YUI-Kompressor und dojo shrinksafe sollte perfekt funktionieren gut, ohne Semikolon, da Sie basierend auf einer vollständigen JavaScript-parser. Aber Packer und JSMin nicht.
Anderen Grund zu verwenden Sie immer die Semikolons am Ende der Anweisungen ist, dass gelegentlich können Sie versehentlich eine Verbindung von zwei Aussagen zu erstellen, etwas ganz anderes. Zum Beispiel, wenn Sie Folgen Sie der Anweisung, mit dem das Allgemeine Verfahren zum erstellen eines Bereichs mit einem Verschluss:
Den parser könnte interpretieren die Klammern als eine Funktion aufrufen, hier verursacht ein Typ-Fehler, aber in anderen Fällen könnte es dazu führen, einen subtilen Fehler, die schwierig zu verfolgen. Ein weiteres Interessantes Malheur ist, wenn die nächste Anweisung beginnt mit einem regulären Ausdruck, der parser könnte denken, die ersten Schrägstrich ist eine division symbol.
JavaScript-Interpreter etwas tun, genannt "semicolon insertion", wenn also eine Zeile ohne Semikolon ist ein Strichpunkt wird ruhig werden Hinzugefügt, um das Ende der Anweisung und tritt kein Fehler auf.
Nicht zu kompliziert und mindestens ein Fehler wird geworfen, wenn etwas ist eindeutig nicht richtig. Aber es gibt Fälle, wo ein Fehler ist nicht geworfen, aber die Anweisungen nicht ausgeführt werden, wie vorgesehen, durch Semikolon einfügen. Betrachten Sie eine Funktion ist, sollte ein Objekt zurückgeben:
Fehler wie diese können maddeningly schwer zu jagen, und während Sie können nicht gewährleisten das nie passiert (da gibt es keine Möglichkeit, die ich kenne ausgeschaltet Semikolon-Einfügung), diese Art von bugs sind leichter zu identifizieren, wenn Sie Ihre Absichten klar durch die konsequente Verwendung von Semikolons. Und explizit das hinzufügen von Semikolon ist allgemein als guter Stil.
Ich wurde zum ersten mal bewusst gemacht, dieser heimtückischen wenig Möglichkeit, beim Lesen Douglas Crockford ist hervorragende und prägnante Buch "JavaScript: Die Guten Teile". Ich hoch empfehlen.
In diesem Fall gibt es keine Notwendigkeit für Sie ein Semikolon am Ende der Anweisung. Die Schlussfolgerung ist die gleiche, aber die Argumentation ist Weg.
JavaScript keine Semikolons als "optional". Vielmehr hat es strenge Regeln, um die automatische Semikolon einfügen. Semikolons sind nicht optional mit Aussagen wie
break
,continue
oderthrow
. Finden Sie die ECMA-Spezifikation der Sprache weitere details, insbesondere 11.9.1, Regeln der automatic semicolon insertion.Verwenden JSLint um Ihre JavaScript-sauber und ordentlich
JSLint sagt:
Semikolon ist nicht erforderlich. Manche Menschen wählen, um zu Folgen das übereinkommen der immer beenden mit einem Semikolon anstatt JavaScript zu tun, also automatisch Zeilenumbrüche, aber ich bin sicher, du wirst Gruppen befürworten beide Richtungen.
Wenn Sie auf der Suche nach writing "richtigen" JavaScript -, würde ich vorschlagen, zu testen in Firefox mit
javascript.options.strict
(Zugriff überabout:config
) auf true gesetzt. Könnte es nicht fangen alles, aber es sollte Ihnen helfen, sicherzustellen, dass Ihr JavaScript-code ist mehr kompatibel.Dieser ist nicht gültig (siehe Klarstellung weiter unten) JavaScript-code, da die Zuordnung ist nur eine ganz normale Aussage, nicht anders als
Das Semikolon weggelassen werden kann, da die JavaScript-Interpreter versuchen, fügen Sie ein Semikolon zu beheben Fehler in der syntax, aber dies ist ein zusätzlicher und unnötiger Schritt. Ich weiß nicht, strict-Modus, aber ich weiß, dass automatisierte Parser oder Kompressoren /obfuscators müssen, dass Semikolon.
Wenn Sie möchten, schreiben korrekte JavaScript-code schreiben das Semikolon 🙂
Laut der ECMAscript-Spezifikation, http://www.ecma-international.org/publications/standards/Ecma-262.htm, die Semikolons werden automatisch eingefügt, wenn Sie fehlt. Das macht Sie nicht erforderlich, für den script-Autor, aber es bedeutet, Sie sind erforderlich für die Dolmetscher. Dies bedeutet, dass die Antwort auf die ursprüngliche Frage lautet 'Nein', Sie sind nicht erforderlich, wenn ein Skript zu schreiben, aber, wie von anderen darauf hingewiesen wird, ist es empfehlenswert, aus verschiedenen Gründen.