Strict Mode ist eine neue Funktion von ECMAScript 5, die es Ihnen ermöglicht, das gesamte Programm oder eine bestimmte Funktion in einen „strikten“ Betriebskontext zu stellen. Dieser strenge Kontext verhindert bestimmte Vorgänge und löst mehr Ausnahmen aus.
Obwohl ECMAScript 5 abwärtskompatibel mit ECMAScript 3 ist, sind im strikten Modus alle in ECMAScript 3 veralteten Funktionen deaktiviert (oder lösen Fehler aus), anstatt kompatibel zu sein.
Das Aktivieren des strikten Modus hat die folgenden Vorteile:
1. Fangen Sie einige Programmierfehler ab und lösen Sie Ausnahmen aus.
2. Verhindern Sie einige relativ „unsichere“ Vorgänge (z. B. den Zugriff auf globale Variablen) und lösen Sie Ausnahmen aus.
3. Deaktivieren Sie einige verwirrende Funktionen.
Die meisten Informationen zum strikten Modus finden Sie auf Seite 223 der ES5-Spezifikation [PDF].
(Hinweis: Der strikte Modus von ECMAScript 5 unterscheidet sich vom strikten Modus von Firefox)
So aktivieren Sie den strikten Modus
Fügen Sie diese Anweisung am Anfang des Programms hinzu, um den strikten Modus für das gesamte Skript zu aktivieren:
Eine praktische Anwendung der Aktivierung des strikten Modus innerhalb einer Funktion besteht darin, die gesamte Javascript-Klassenbibliothek innerhalb einer strikten Modusfunktion zu definieren, sodass sie keinen Einfluss auf externen Code hat:
(function(){
„strikt verwenden“;
// Definieren Sie Ihre Bibliothek streng...
})();
// Nicht strenger Code...
Variablen und Eigenschaften
Die Zuweisung zu einer undefinierten Variablen schlägt fehl, anstatt die Variable zu einer globalen Variablen zu machen.
Das Schreiben einer Eigenschaft mit der beschreibbaren Eigenschaft „false“, das Löschen einer Eigenschaft mit der konfigurierbaren Eigenschaft „false“ oder das Hinzufügen einer erweiterbaren Eigenschaft mit der Eigenschaft „false“ führt zu einem Fehler (diese Eigenschaften sind vorab vereinbart). In der Vergangenheit haben diese Vorgänge keine Ausnahme ausgelöst und sind einfach stillschweigend fehlgeschlagen.
Das Ausführen eines Löschvorgangs für eine Variable, Funktion oder einen Funktionsparameter führt zu einem Fehler.
lösche foo; // Fehler
Test löschen; // Fehler
Funktionstest2(arg) {
delete arg; // Fehler
}
Bewertung
Jede Verwendung des Namens „eval“ (die Hauptabsicht besteht darin, die eval-Funktion auf eine Variable oder Objekteigenschaft zu verweisen) ist verboten.
Funktion
Das Überschreiben des Argumentobjekts führt zu einem Fehler:
with() { }-Anweisung ist im strikten Modus vollständig fehlerhaft.