Überlegungen zum Wechseln der JavaScript-Modi

  • Freigeben Version: Zurich
  • Aktualisiert 31. Juli 2025
  • 3 Minuten Lesedauer
  • 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 Probleme beheben, die nach dem Wechsel auftreten.

    Weitere Informationen zu den einzelnen JavaScript-Modus finden Sie unter JavaScript-Modi Und Unterstützung der JavaScript-Engine-Funktion.

    Diese Tabelle zeigt, wie sich das JavaScript-Verhalten von der milden und fehleranfälligen Umgebung vor ES5 zu einer strengeren und vorhersagbaren ES5 und schließlich zur funktionsreicheren Umgebung von ES12 (ECMAScript 2021) entwickelt hat.

    Tabelle : 1. Verhaltensunterschiede in JavaScript-Modi
    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:
    *** Script: [object Arguments]
    *** Script: [object Arguments]
    *** Script: [object Arguments]
    *** Script: 123
    Im strikten Modus spiegelt das Argumentobjekt keine Parameteränderungen wider und löst einen Fehler aus. Ausdrucke:
    sn_es5: 123
    sn_es5: undefined
    sn_es5: [object Arguments]
    sn_es5: 123
    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. Wie ES5, aber der strikte Modus hilft, einige Zuweisungen zu verhindern. Der bedingte Ausdruck muss in diesem Formular geschrieben werden:
    (cond_expr instanceof Boolean ? cond_expr.valueOf() : cond_expr).
    Ausnahme für Syntaxfehler Syntaxfehler lösen zur Laufzeit Ausnahmen aus. Fehlerbehandlung ist inkonsistent. Beispiel:
    Javascript compiler exception: unterminated string literal (null.null.script; line 1) in:
    var b = '
    Konsistentere Syntaxfehlerbehandlung, insbesondere im strikten Modus. Beispiel:
    Evaluator: com.glide.script.RhinoEcmaError: unterminated string literal
       script : Line(1) column(9)
    ==>   1: var b = '
    Wie ES5, aber mit robusterer Handhabung und klareren Fehlermeldungen in aktualisierten Engines. Beispiel:
    SyntaxError: Unterminated string constant at line 1
    
    ==>   1: var b = '
    Erhöhen und verringern Für Variablen zulässig, bei komplexen Ausdrücken kann sich jedoch unerwartet verhalten. Ausdrucke:
    *** Script: c: 1
    *** Script: gr.related_incidents: 1
    *** Script: 2
    *** Script: 3
    Verbesserte Klarheit, aber weiterhin zulässig für Variablen ( VAR , Lassen Sie mich , const ). Ausdrucke:
    sn_es5: c: 0
    sn_es5: gr.related_incidents: 1
    sn_es5: 1
    sn_es5: 2
    Entspricht ES5, mit strengeren Regeln in einigen Kontexten (z. B. const ).
    Positionsfortläufe Zulässig mit umgekehrtem Schrägstrich ( \ ), wurde jedoch aufgrund von Lesbarkeitsproblemen nicht empfohlen. In diesem Beispiel werden alle drei Funktionen aufgerufen.
    var expr = doFoo();  // do foo
               doBar();  // do bar 
               finish();   // all done
     eval(expr);
    
    Wie Kompatibilitätsmodus; keine Änderung bei der Verarbeitung von Linienfortläufen. Im vorherigen Beispiel ruft ES5 nur die erste Funktion auf und behandelt alles nach dem ersten Kommentar, einschließlich der Neuzeile, bis zum Ende des Ausdrucks als Kommentar Wie ES5, aber Vorlagenliterale bieten eine besser lesbare Alternative.
    Fehlende Semikolons Das automatische 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 ReferenceError . Wirft ein TypeError 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. Wie vor ES5. Entspricht dem Kompatibilitätsmodus und dem ES5-Standardmodus.
    Numerische Literale Einfache Dezimal- und Hexadezimalliterale. Strengere Analyseregeln und eine bessere Verarbeitung numerischer Literale eingeführt. Binär 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, z. B. Objekt.für . Druckt das Objekt, wenn es zurückgegeben wird. Entspricht ES5.
    Behandeln Sie „Let“ und „Ertrag“ als Stichwörter Lassen Sie mich Und Ertrag Sind keine Stichwörter und können nur als Bezeichner verwendet werden. Lassen Sie mich 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.