Überlegungen zum Wechseln der JavaScript-Modi
Das Wechseln des JavaScript-Modus für eine Anwendung oder ein Skript kann das Verhalten vorhandener Skripts ändern. Überprüfen Sie einige Beispiele für Verhaltensänderungen, bevor Sie den JavaScript-Modus wechseln, oder um Probleme zu beheben, die nach dem Wechsel auftreten.
Weitere Informationen zu den einzelnen JavaScript-Modus finden Sie unter JavaScript-ModiUnd Unterstützung der JavaScript-Engine-Funktion.
Diese Tabelle hebt hervor, wie sich das JavaScript-Verhalten von der milden und fehleranfälligen Umgebung vor ES5 zu einer strengeren und vorhersehbareren ES5 und schließlich zur funktionsreicheren Umgebung von ES12 entwickelt hat (ECMAScript 2021).
| Funktion | Kompatibilitätsmodus | ES5-Standardmodus | ECMAScript 2021 (ES12) |
|---|---|---|---|
| Argumentobjekt | Die Argumente Objekt ist vorhanden, aber es ist kein vorhanden Strikter Modus , Sodass Änderungen berücksichtigt werden Argumente . Ausdrucke: |
Im strikten Modus spiegelt das Argumentobjekt keine Parameteränderungen wider und löst einen Fehler aus. Ausdrucke: |
Entspricht ES5. |
| Boolesche Überschreibungen | Primitive Boolesche Werte ( Wahr , Falsch ) Kann überschrieben werden, was zu unerwartetem Verhalten führt. |
Primitive boolesche Werte sind besser geschützt, können jedoch weiterhin überschrieben werden, wenn sie Variablen zugewiesen werden. | Dasselbe wie ES5, aber der strikte Modus hilft, einige Zuweisungen zu verhindern. Der bedingte Ausdruck muss in diesem Formular geschrieben werden: |
| Ausnahme für Syntaxfehler | Syntaxfehler lösen zur Laufzeit Ausnahmen aus. Fehlerbehandlung ist inkonsistent. Beispiel: |
Konsistentere Syntaxfehlerbehandlung, insbesondere im strikten Modus. Beispiel: |
Wie ES5, aber mit robusterer Handhabung und klareren Fehlermeldungen in aktualisierten Engines. Beispiel: |
| Erhöhen und verringern | Zulässig für Variablen, kann sich bei komplexen Ausdrücken jedoch unerwartet verhalten. Ausdrucke: |
Verbesserte Klarheit, aber weiterhin zulässig für Variablen ( VAR , Lassen Sie , const ). Ausdrucke: |
Entspricht ES5, mit strengeren Regeln in einigen Kontexten (z. B. const ). |
| Linienfortläufe | Zulässig mit umgekehrtem Schrägstrich ( \ ), aber aufgrund von Lesbarkeitsproblemen entmutigt. In diesem Beispiel werden alle drei Funktionen aufgerufen. |
Wie Kompatibilitätsmodus; keine Änderung bei der Verarbeitung von Positionsfortläufen. 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 | Dasselbe wie ES5, aber Vorlagenliterale bieten eine besser lesbare Alternative. |
| Fehlende Semikolons | Automatisches Semikolon-Einfügen (ASI) führte häufig zu unerwartetem Verhalten. | Löst einen Syntaxfehler aus, wenn ein Semikolon fehlt. | Entspricht ES5. Aktualisierte Praktiken fördern explizite Semikolons. |
| Nicht vorhandene Funktionen | Beim Aufrufen einer nicht vorhandenen Funktion wird ein ausgelöst Referenzfehler . |
Wirft einen aus Typfehler 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 | Der Zugriff auf eine nicht vorhandene Eigenschaft wird zurückgegeben Nicht definiert ; Kein Fehler ausgelöst. |
Entspricht vor ES5. | Entspricht dem Kompatibilitätsmodus und dem ES5-Standardmodus. |
| Numerische Literale | Einfache Dezimal- und Hexadezimalliterale. | Hat strengere Analyseregeln und eine bessere Verarbeitung numerischer Literale eingeführt. | Binärdatei hinzugefügt ( 0b ), Oktal ( 0o ) Und BigInt-Literale ( 123n ). |
| Reserviertes Stichwort als Eigenschaft | Die Verwendung reservierter Stichwörter ist nicht möglich. | Reservierte Stichwörter können als Eigenschaftsnamen ohne Fehler verwendet werden. Beispiel: Objekt.für . Druckt das Objekt, wenn es zurückgegeben wird. |
Entspricht ES5. |
| Behandeln Sie „Let“ und „Ertrag“ als Stichwörter | Lassen Sie Und Ertrag Sind keine Stichwörter und können nur als Bezeichner verwendet werden. |
Lassen Sie Wird als Stichwort eingeführt. Ertrag Ist im strikten Modus reserviert. |
Beide sind Stichwörter. Wenn Sie sie als Bezeichner verwenden, werden Syntaxfehler ausgelöst. |