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.


Note 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

"use strict";
x = 3.14;       // Fehler (x ist nicht definiert)

Ausprobieren »

Beispiel

"use strict";
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

x = 3.14;       // Kein Fehler
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:

"use strict";
x = 3.14;                // Fehler (x ist nicht definiert)

Ausprobieren »
Note Ein Objekt ist ebenfalls eine Variable.

"use strict";
x = {p1:10, p2:20};      // Fehler (x ist nicht definiert)

Ausprobieren »

Das Löschen einer Variablen oder eines Objekts ist nicht erlaubt.

"use strict";
var x = 3.14;
delete x;                // Fehler

Ausprobieren »

Das Löschen einer Funktion ist nicht erlaubt.

"use strict";
Funktion x(p1, p2) {};
delete x;                // Fehler

Ausprobieren »

Doppelte Variablennamen sind nicht erlaubt:

"use strict";
function x(p1, p1) {};   // Fehler

Ausprobieren »

Oktal-Literale sind nicht erlaubt:

"use strict";
var x = 010;             // Fehler

Ausprobieren »

Escape-Zeichen sind nicht erlaubt:

"use strict";
var x = \010;            // Fehler

Ausprobieren »

Zuweisung zu einer schreibgeschützten Eigenschaft ist nicht erlaubt:

"use strict";
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:

"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // Fehler

Ausprobieren »

Das Löschen einer nicht löschbaren Eigenschaft ist nicht erlaubt:

"use strict";
delete Object.prototype; // Fehler

Ausprobieren »

Variablennamen dürfen die Zeichenfolge "eval" nicht verwenden:

"use strict";
var eval = 3.14;         // Fehler

Ausprobieren »

Variablennamen dürfen die Zeichenfolge "arguments" nicht verwenden:

"use strict";
var arguments = 3.14;    // Fehler

Ausprobieren »

Die folgende Anweisung ist nicht erlaubt:

"use strict";
with (Math){x = cos(2)}; // Fehler

Ausprobieren »

Aus Sicherheitsgründen können im Gültigkeitsbereich von eval() erstellte Variablen nicht aufgerufen werden:

"use strict";
eval ("var x = 2");
alert (x);               // Fehler

Ausprobieren »

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
"use strict";
var public = 1500;      // Fehler

Ausprobieren »

Note Die "use strict"-Direktive darf nur am Anfang eines Skripts oder einer Funktion stehen.
Andere Erweiterungen