JavaScript-Strict-Mode (use strict)
Der JavaScript-Strict-Mode läuft unter strengen Bedingungen.
Verwendung der "use strict"-Direktive
Die "use strict"-Direktive ist neu in JavaScript 1.8.5 (ECMAScript5).
Es ist keine Anweisung, sondern ein literaler Ausdruck und wird in älteren JavaScript-Versionen ignoriert.
Der Zweck von "use strict" besteht darin, festzulegen, dass der Code unter strengen Bedingungen ausgeführt werden soll.
Im Strict Mode können Sie keine nicht deklarierten Variablen verwenden.
![]() |
Browser, die den Strict Mode unterstützen: Internet Explorer 10 +、Firefox 4+、 Chrome 13+、 Safari 5.1+、 Opera 12+。 |
|---|
Deklaration des Strict Mode
Der Strict Mode wird deklariert, indem am Anfang eines Skripts oder einer Funktionuse strict; als Ausdruck zur Deklaration hinzugefügt wird.
Im Beispiel können wir im BrowserF12 (oder "Tools > More Tools > Developer Tools")drücken, um den Debug-Modus zu aktivieren und Fehlermeldungen anzuzeigen.

Sie können auch mit der rechten Maustaste klicken und auswählen"Inspect", um es anzuzeigen. Die GIF-Demonstration sieht wie folgt aus:

Beispiel
myFunction();
function myFunction() {
y = 3.14; // Fehler (y ist nicht definiert)
}
Ausprobieren »
Das Deklarieren des Strict Mode innerhalb einer Funktion hat lokalen Gültigkeitsbereich (der Strict Mode wird nur innerhalb der Funktion angewendet):
Beispiel
myFunction();
function myFunction() {
"use strict";
y = 3.14; // Fehler (y ist nicht definiert)
}
Ausprobieren »
Warum Strict Mode verwenden:
- Beseitigt einige unvernünftige und ungenaue Aspekte der JavaScript-Syntax und reduziert einige seltsame Verhaltensweisen.
- Beseitigt einige unsichere Aspekte der Codeausführung und gewährleistet die Sicherheit der Codeausführung.
- Verbessert die Compiler-Effizienz und erhöht die Ausführungsgeschwindigkeit
- Ebnet den Weg für zukünftige neue Versionen von JavaScript.
„Strict Mode“ spiegelt eine vernünftigere, sicherere und strengere Entwicklungsrichtung für JavaScript wider. Mainstream-Browser, einschließlich IE 10, unterstützen ihn bereits, und viele große Projekte haben begonnen, ihn vollständig zu übernehmen.
Andererseits kann derselbe Code im „Strict Mode“ unterschiedliche Ergebnisse liefern; einige Anweisungen, die im „normalen Modus“ funktionieren, funktionieren im „Strict Mode“ nicht. Wenn du diese Inhalte beherrschst, hilft dir das, JavaScript tiefer zu verstehen und dich zu einem besseren Programmierer zu machen.
Einschränkungen des Strict Mode
Nicht deklarierte Variablen sind nicht erlaubt:
![]() |
Ein Objekt ist ebenfalls eine Variable. |
|---|
Das Löschen einer Variablen oder eines Objekts ist nicht erlaubt.
Das Löschen einer Funktion ist nicht erlaubt.
Doppelte Variablennamen sind nicht erlaubt:
Oktal-Literale sind nicht erlaubt:
Escape-Zeichen sind nicht erlaubt:
Zuweisung zu einer schreibgeschützten Eigenschaft ist nicht erlaubt:
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // Fehler
Ausprobieren »
Zuweisung zu einer Eigenschaft, die mit einer Getter-Methode gelesen wird, ist nicht erlaubt:
Das Löschen einer nicht löschbaren Eigenschaft ist nicht erlaubt:
Variablennamen dürfen die Zeichenfolge "eval" nicht verwenden:
Variablennamen dürfen die Zeichenfolge "arguments" nicht verwenden:
Die folgende Anweisung ist nicht erlaubt:
Aus Sicherheitsgründen können im Gültigkeitsbereich von eval() erstellte Variablen nicht aufgerufen werden:
Das Schlüsselwort this darf nicht auf das globale Objekt zeigen.
function f(){
return !this;
}
// 返回false,因为"this"指向全局对象,"!this"就是false
function f(){
"use strict";
return !this;
}
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true.
Wenn Sie daher einen Konstruktor verwenden und vergessen, new hinzuzufügen, zeigt this nicht mehr auf das globale Objekt, sondern wirft stattdessen einen Fehler.
function f(){
"use strict";
this.a = 1;
};
f();// 报错,this未定义
Reservierte Schlüsselwörter
Um zu zukünftigen neuen Versionen von JavaScript überzugehen, fügt der strikte Modus einige reservierte Schlüsselwörter hinzu:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
![]() |
Die "use strict"-Direktive darf nur am Anfang eines Skripts oder einer Funktion stehen. |
|---|
