Einige Details zu Semikolons in JavaScript

Einige Details zu Semikolons in JavaScript

Vorwort

Semikolons sind in JavaScript optional und ihre Verwendung ist in erster Linie eine Frage des Codierstils. Ein Stil besteht darin, Semikolons zu verwenden, um Anweisungen explizit zu beenden, auch wenn sie nicht erforderlich sind; ein anderer Stil besteht darin, Semikolons so weit wie möglich zu vermeiden und sie nur bei Bedarf hinzuzufügen. Ich persönlich mag das Hinzufügen von Semikolons nicht, aber es gibt natürlich viele Freunde, die das mögen. Welchen Stil Sie auch bevorzugen, es gibt einige Details zu Semikolons in JavaScript, die Sie kennen sollten.

Die Rolle von Semikolons im Code

Die Hauptfunktion des Semikolons besteht darin, als Anweisungsbehauptung (EOS) eine Programm-Anweisung zu beenden. Der Zweck besteht darin, dem Parser die korrekte Analyse des Programms zu ermöglichen. In vielen Sprachen im C-Stil wird ein Semikolon verwendet, um eine Anweisungszeile explizit zu beenden, hauptsächlich um den Entwicklungsaufwand für den Sprachcompiler zu reduzieren. Moderne Compiler sind jedoch intelligent genug, um mehrzeilige Anweisungen gut verarbeiten zu können. Viele Sprachen erfordern keine expliziten Semikolon-Endungen, wie etwa Go, Scala, Ruby, Python, Swift, Groovy usw.

Obwohl JavaScript eine C-ähnliche Sprache ist, unterscheidet es sich von C und Java. Semikolons sind in JavaScript ebenfalls optional und es verfügt über einen automatischen Semikolon-Einfügemechanismus namens Auto Semicolon Insertion (ASI).

Automatischer Semikolon-Einfügungsmechanismus in JavaScript

JavaScript verfügt über einen Mechanismus namens „Automatische Semikolon-Einfügung“ oder kurz ASI. Es gibt eine klare Aussage zur automatischen Semikolon-Einfügung in ECMA-262 – Automatische Semikolon-Einfügung:

Analysieren Sie das Programm von links nach rechts. Wenn ein Token (anstößiges Token) gefunden wird, das keiner Grammatikproduktionsregel entspricht, wird automatisch ein Semikolon vor dem anstößigen Token eingefügt, sofern eine der folgenden Bedingungen erfüllt ist:

  • Mindestens ein Zeilenabschluss trennt das fehlerhafte Token vom vorherigen Token.
  • Das fehlerhafte Token ist }.

Analysieren Sie das Programm von links nach rechts. Der Eingabestrom der Token ist beendet. Wenn der Parser den Eingabe-Token-Strom nicht in ein einziges vollständiges ECMAScript-Programm zerlegen kann, wird am Ende des Eingabestroms automatisch ein Semikolon eingefügt.

Analysieren Sie das Programm von links nach rechts. Wenn Sie auf ein Token stoßen, das von einigen Grammatikproduktionsregeln zugelassen ist, es sich jedoch um eine eingeschränkte Operation handelt (Restricted Productions), wird automatisch ein Semikolon vor dem eingeschränkten Token eingefügt, wenn mindestens ein Zeilenumbruchzeichen das eingeschränkte Token vom vorherigen Token trennt.

Allerdings hat die obige Regel eine zusätzliche Vorrangbedingung: Wenn das Ergebnis der Analyse nach dem Einfügen des Semikolons eine leere Anweisung ist oder wenn es nach dem Einfügen des Semikolons zu einem der beiden Semikolons im Kopf der for-Anweisung wird, wird automatisch kein Semikolon eingefügt.

Hinweis: Die obige Übersetzung ist etwas umständlich. Sie können sie mehrmals lesen oder den englischen Originaltext ECMA-262 - Automatische Semikolon-Einfügung lesen.

Automatisches Einfügen von Semikolon

Kurz zusammengefasst basiert das automatische Einfügen von Semikolons auf Zeilenumbrüchen. Der Parser versucht, neue Zeilen in die aktuelle Zeile einzufügen. Neue Zeilen werden nur dann als unabhängige Anweisungen behandelt, wenn sie den ASI-Regeln entsprechen.

Die wichtigsten Regeln für die automatische Einfügung lauten wie folgt:

  1. Wenn eine neue Zeile in die aktuelle Zeile eingefügt wird, stellt dies eine ungültige Anweisung dar und kann nicht richtig analysiert werden. Es wird automatisch ein Semikolon eingefügt.
  2. Wenn eine neue Zeile mit } beginnt, wird am Ende des Codeblocks automatisch ein Semikolon eingefügt.
  3. Beim Beenden mit einer return-Anweisung wird automatisch ein Semikolon am Ende der Zeile eingefügt
  4. Beim Beenden mit einer break-Anweisung wird automatisch ein Semikolon am Ende der Zeile eingefügt
  5. Beim Beenden mit einer Throw-Anweisung wird automatisch ein Semikolon am Ende der Zeile eingefügt
  6. Beim Beenden mit einer continue-Anweisung wird automatisch ein Semikolon am Ende der Zeile eingefügt
  7. Fügt automatisch ein Semikolon am Ende einer Zeile ein, wenn diese mit einer ES6-Yield-Anweisung endet
  8. ++, -- Der Suffixausdruck wird als Anfang einer neuen Zeile verwendet und am Anfang der Zeile wird automatisch ein Semikolon eingefügt
  9. Automatisches Einfügen einer Nummer am Ende der Quellcodedatei

Wenn, wie oben gezeigt, das Semikolon nicht hinzugefügt wird, führt die Ausführung dieses Codes zu einem Fehler.

Semikolons können nicht weggelassen werden

Wenn eine Anweisung mit (, [, /, +, - beginnt, kann sie normalerweise als Teil der Anweisung in der vorherigen Zeile interpretiert werden. In der Praxis gibt es nur sehr wenige Anweisungen, die mit /, +, - beginnen. Anweisungen, die mit (, [ beginnen, sind jedoch sehr häufig und ich kann normalerweise ohne weiteres ein Semikolon am Zeilenanfang hinzufügen.

Zuvor haben wir etwas über das automatische Einfügen von Semikolons gelernt. Sehen wir uns nun einige Beispiele an.

lass hey = "hey"
['liu','liuxing'].fürEach(console.log)

Denken Sie eine Sekunde darüber nach. Was ist das obige Ergebnis? Das Ausführen dieses Codes löst

Nicht abgefangener TypeError: Eigenschaft „forEach“ von undefined kann nicht gelesen werden

Basierend auf Regel 1 wird der obige Code in den folgenden Code zerlegt

let hey = 'hey'['liu','liuxing'].forEach(console.log)

Es ist ersichtlich, dass die Verwendung einer Anweisung, die mit [ beginnt, ohne davor ein Semikolon zu haben, wahrscheinlich einen Fehler verursacht.

Schauen wir uns einen weiteren Beispielcode einer Anweisung an, die mit ( beginnt.

Konstante a = 1
Konstante b = 2
Konstante c = a + b
(a + b).toString()

Würden Sie erwarten, dass der obige Code einen Wert von „3“ erzeugt? Tatsächlich wird jedoch der Fehler „b ist keine Funktion“ ausgegeben, da es gemäß den ASI-Regeln in den folgenden Code zerlegt wird:

const a = 1;const b = 2;const c = a + b(a + b).toString()

Wir werden die Fälle, in denen /, +, - am Anfang einer Anweisung verwendet werden, nicht einzeln vorstellen. Diese Situation ist relativ selten, Sie können es also selbst ausprobieren. Denken Sie daran, dass Sie vor einer Anweisung ein Semikolon einfügen müssen, wenn sie mit (, [, /, + oder - beginnt!

Schauen wir uns als Nächstes die Verwendung von „return“ an.

(() => {
  zurückkehren
  {
    Name: „Liu Xing“
  }
})()

Sie erwarten die Rückgabe eines Objekts mit Namen, es wird jedoch „Undefiniert“ zurückgegeben. Dies liegt daran, dass ASI der Rückgabe automatisch ein Semikolon hinzufügt. Hier müssen Sie Ihre Zeilen richtig umbrechen, um sicherzustellen, dass der Code korrekt ausgeführt wird. Wir sehen, dass wir neben korrekten Semikolons auch korrekte und sinnvolle Zeilenumbrüche benötigen, um die Codestruktur übersichtlicher zu gestalten.

Zusammenfassen

Wir haben den automatischen Semikolon-Einfügungsmechanismus von JavaScript kennengelernt und wissen, wann JavaScript automatisch Semikolons hinzufügt. Wir müssen Semikolons am Anfang von (, [, /, + und - genau hinzufügen. Der automatische Semikolon-Einfügungsmechanismus bietet uns zwei Optionen: Semikolons hinzufügen oder nicht? Das hängt ganz von Ihren oder den Vorlieben Ihres Teams ab. Jetzt haben wir auch Tools wie Prettier und Eslint, um den Stil automatisch zu vereinheitlichen.

Dies ist das Ende dieses Artikels über Semikolons in JavaScript. Weitere relevante Inhalte zu Semikolons in JavaScript finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • JS-Validierung mehrerer E-Mails anhand regulärer Ausdrücke, vollständige Beispiele [E-Mails durch Semikolon getrennt]
  • Eine kurze Diskussion über die Verwendung von Semikolons in JavaScript
  • JavaScript-Syntax: Automatische Semikolon-Einfügung
  • Über das Semikolon nach JavaScript-Anweisungen
  • Ein durch JS-Semikolon verursachtes Debugging-Problem
  • Beispiel für einen Semikolon-Absturz in js
  • Zusammenfassung und detaillierte Einführung des Javascript-Semikolons
  • Eine kurze Analyse des Mechanismus zur automatischen Semikolon-Einfügung (ASI) von Javascript
  • So verhindern Sie, dass JavaScript automatisch Semikolons einfügt
  • Eine detaillierte Einführung in den Semikolon-Einfügungsmechanismus in JavaScript

<<:  Linux-Konfiguration SSH passwortfreie Anmeldung "ssh-keygen" grundlegende Nutzung

>>:  Perfekte Lösung für das Problem, dass Daten abgeschnitten werden, wenn die Funktion „group concat“ in Mysql5.7 verwendet wird

Artikel empfehlen

js zum Schreiben des Karusselleffekts

In diesem Artikel wird der spezifische Code von j...

10 tödliche semantische Fehler in der Webtypografie

<br />Dies stammt aus dem Inhalt von „Web Fr...

Einführung in die Cloud-native-Technologie Kubernetes (K8S)

Inhaltsverzeichnis 01 Was ist Kubernetes? 02 Der ...

Verwenden Sie CSS, um einen kreisförmigen Welleneffekt zu erzielen

Auf Mobilgeräten sehe ich häufig kreisförmige Wel...

Verwendung des Linux-Datumsbefehls

1. Befehlseinführung Mit dem Datumsbefehl wird di...

Linux löscht automatisch Protokolle und Beispielbefehle von vor n Tagen

1. Befehl zum Löschen von Dateien: Suche das ents...

Detaillierte Erklärung zur Verwendung von Join zur Optimierung von SQL in MySQL

0. Bereiten Sie relevante Tabellen für die folgen...

MySQL-Datenbank implementiert OLTP-Benchmark-Test basierend auf Sysbench

Sysbench ist ein hervorragendes Benchmark-Tool, d...

Beispielcode zum Mischen von Float und Margin in CSS

Bei meinen letzten Studien habe ich einige Layout...

Erste Schritte mit GDB unter Linux

Vorwort gdb ist ein sehr nützliches Debugging-Too...

Verwendung des SerialPort-Moduls in Node.js

Inhaltsverzeichnis Zweck Modulinstallation Grundl...

Drei Möglichkeiten zum Teilen der Komponentenlogik in React

Ohne weitere Umschweife sind dies diese drei Meth...