Überlegungen zum Wechseln des JavaScript-Modus
Durch das Ändern des JavaScript-Modus für eine Anwendung oder ein Skript kann sich das Verhalten vorhandener Skripts ändern. Sehen Sie sich einige Beispiele für Verhaltensänderungen an, bevor Sie den JavaScript-Modus wechseln, oder um Probleme zu beheben, die nach dem Wechsel auftreten.
Weitere Informationen zu den einzelnen JavaScript-Modi finden Sie unter JavaScript-Modi und Unterstützung der JavaScript-Engine-Funktionen.
Diese Tabelle zeigt, wie sich das JavaScript-Verhalten von der nachlässigen und fehleranfälligen Umgebung vor ES5 zum strengeren und vorhersehbareren ES5 und schließlich zur funktionsreicheren ES12-Umgebung (ECMAScript 2021) entwickelt hat.
| Funktion | Kompatibilitätsmodus | ES5-Standardmodus | ECMAScript 2021 (ES12) |
|---|---|---|---|
| Argumentobjekt | Das Argumentobjekt ist vorhanden, aber es gibt keinen strikten Modus, sodass Änderungen sich in Argumentenwiderspiegeln. Drucke: |
Im strikten Modus spiegelt das Argumentobjekt keine Parameteränderungen wider und löst einen Fehler aus. Drucke: |
Identisch mit ES5. |
| Boolesche Überschreibungen | Primitive boolesche Werte (true, false) können überschrieben werden, was zu unerwartetem Verhalten führt. |
Primitive boolesche Werte sind besser geschützt, können aber dennoch überschrieben werden, wenn sie Variablen zugewiesen werden. | Identisch mit ES5, aber im strikten Modus können einige Zuweisungen verhindert werden. Der bedingte Ausdruck muss in diesem Format geschrieben werden: |
| Ausnahme für Syntaxfehler | Syntaxfehler lösen zur Laufzeit Ausnahmen aus. Fehlerbehandlung ist inkonsistent. Beispiel: |
Konsistentere Behandlung von Syntaxfehlern, insbesondere im strikten Modus. Beispiel: |
Dasselbe wie ES5, jedoch mit robusterer Handhabung und eindeutigeren Fehlermeldungen in aktualisierten Engines. Beispiel: |
| Erhöhen und verringern Sie die Werte | Für Variablen zulässig, kann jedoch bei komplexen Ausdrücken unerwartetes Verhalten zeigen. Drucke: |
Übersichtlichkeit verbessert, aber für Variablen (var, let, const) weiterhin zulässig. Drucke: |
Identisch mit ES5, mit strengeren Regeln in einigen Kontexten (z. B. const). |
| Zeilenfortsetzungen | Mit einem umgekehrten Schrägstrich (\) zulässig, aber aufgrund von Lesbarkeitsproblemen nicht empfohlen. In diesem Beispiel werden alle drei Funktionen aufgerufen. |
Identisch mit Kompatibilitätsmodus; Keine Änderung der Bearbeitungspositionsfortsetzungen. Im vorherigen Beispiel ruft ES5 nur die erste Funktion auf und behandelt alles nach dem ersten Kommentar einschließlich der Newline bis zum Ende des Ausdrucks als Kommentar. | Identisch mit ES5, Vorlagenliterale bieten jedoch eine besser lesbare Alternative. |
| Fehlende Semikolon | Die automatische Semikoloneinfügung (ASI) führte häufig zu unerwartetem Verhalten. | Löst einen Syntaxfehler aus, wenn ein Semikolon fehlt. | Identisch mit ES5. Aktualisierte Praktiken fördern explizite Semikolon. |
| Nicht vorhandene Funktionen | Der Aufruf einer nicht vorhandenen Funktion löst einen Referenzfehleraus. |
Löst einen TypeError aus, wenn eine Nicht-Funktion aufgerufen wird. |
Löst einen ECMAError aus, wenn eine nicht vorhandene Funktion aufgerufen oder auf eine Eigenschaft verwiesen wird. |
| Nicht vorhandene Eigenschaften | Beim Zugriff auf eine nicht vorhandene Eigenschaft wird undefiniertzurückgegeben; kein Fehler ausgegeben. |
Identisch mit vor ES5. | Identisch mit Kompatibilitätsmodus und ES5-Standardmodus. |
| Numerische Literale | Grundlegende Dezimal- und Hexadezimalliterale. | Es wurden strengere Analyseregeln und eine bessere Verarbeitung von numerischen Literalen eingeführt. | Binär- (0b), Oktal- (0o) und BigInt-Text (123n) hinzugefügt. |
| Reserviertes Stichwort als Eigenschaft | Die Verwendung reservierter Stichwörter ist nicht möglich. | Reservierte Stichwörter können ohne Fehler als Eigenschaftsnamen verwendet werden, z. B. obj.for. Gibt das Objekt bei der Rückgabe an. |
Identisch mit ES5. |
| Behandeln Sie „let“ und „Yield“ als Stichwörter | „let“ und „Yield“ sind keine Schlüsselwörter und können nur als Bezeichner verwendet werden. |
let wird als Stichwort eingeführt. Ausbeute ist im strikten Modus reserviert. |
Beides sind Schlüsselwörter. Wenn Sie sie als Bezeichner verwenden, werden Syntaxfehler ausgelöst. |