Heim  >  Artikel  >  Web-Frontend  >  Einführung in ECMAScript 5 Strict Mode_Grundkenntnisse

Einführung in ECMAScript 5 Strict Mode_Grundkenntnisse

WBOY
WBOYOriginal
2016-05-16 16:11:421270Durchsuche

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:

Code kopieren Der Code lautet wie folgt:

'strikt verwenden';

Sie können den strikten Modus auch nur innerhalb der Funktion aktivieren, sodass er keine Auswirkungen auf die Außenseite hat:
Code kopieren Der Code lautet wie folgt:

Funktion imStrict() {
'strikt verwenden';
​//...dein Code...
}

Die Anweisung, die den strikten Modus aktiviert, ist nur eine einfache Zeichenfolge „use strict“ ohne neue Syntax. Dies bedeutet, dass es keine negativen Auswirkungen auf ältere Browser gibt.

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:

Code kopieren Der Code lautet wie folgt:

// Nicht strenger Code...

(function(){
„strikt verwenden“;

// Definieren Sie Ihre Bibliothek streng...
})();

// Nicht strenger Code...


Was ändert sich also an Skripten im strikten Modus?

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.

Code kopieren Der Code lautet wie folgt:

var foo = 'test';
Funktionstest() { }

lösche foo; // Fehler
Test löschen; // Fehler

Funktionstest2(arg) {
delete arg; // Fehler
}


Das Definieren derselben Eigenschaften innerhalb eines Objektcontainers führt dazu, dass eine Ausnahme ausgelöst wird:
Code kopieren Der Code lautet wie folgt:

//Fehler
{ foo: true, foo: false }

Bewertung

Jede Verwendung des Namens „eval“ (die Hauptabsicht besteht darin, die eval-Funktion auf eine Variable oder Objekteigenschaft zu verweisen) ist verboten.

Code kopieren Der Code lautet wie folgt:

// Alle erzeugen Fehler...
obj.eval = ...
obj.foo = eval;
var eval = ...;
for ( var eval in ... ) {}
Funktion eval(){}
Funktionstest(eval){}
Funktion(eval){}
neue Funktion("eval")

Darüber hinaus hat die Deklaration neuer Variablen über eval ebenfalls keine Auswirkung:
Code kopieren Der Code lautet wie folgt:

eval("var a = false;");
print( typeof a ); // undefiniert

Funktion

Das Überschreiben des Argumentobjekts führt zu einem Fehler:

Code kopieren Der Code lautet wie folgt:

Argumente = [...]; // nicht erlaubt

Parameter mit demselben Namen verursachen einen Fehler:
Code kopieren Der Code lautet wie folgt:

(function(foo, foo) { }) // Fehler

Der Zugriff auf arguments.caller und arguments.callee löst eine Ausnahme aus. Daher muss jede anonyme Funktion, die verwendet werden muss, zuerst benannt werden, zum Beispiel:
Code kopieren Der Code lautet wie folgt:

setTimeout(function later(){
// Sachen machen...
​setTimeout(später, 1000);
}, 1000 );

Die Argumente sowie die Caller- und Callee-Eigenschaften der Funktion sind nicht mehr vorhanden und die Vorgänge, die sie definiert haben, sind verboten.
Code kopieren Der Code lautet wie folgt:

Funktionstest() { }
test.caller = 'caller'; // Fehler

Schließlich wurde ein seit langem bestehender (und sehr ärgerlicher) Fehler behoben: Wenn null oder undefiniert als erster Parameter der Methode Function.prototype.call oder Function.prototype.apply verwendet wird, zeigt dieser innerhalb der Funktion auf das globale Objekt . Der strikte Modus verhindert die Ausführung und löst eine Ausnahme aus:
Code kopieren Der Code lautet wie folgt:

(function(){ ... }).call(null); // Ausnahme

with() { } Die

with() { }-Anweisung ist im strikten Modus vollständig fehlerhaft.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn