"use strict";
Definiert, dass JavaScript-Code im „strict mode“ ausgeführt werden soll.
Die „use strict“-Direktive
Die "use strict"
-Direktive ist neu in ECMAScript Version 5.
Es handelt sich dabei nicht um eine Anweisung, sondern um einen wörtlichen Ausdruck, der von früheren Versionen von JavaScript ignoriert wurde.
Der Zweck von "use strict"
ist es, anzuzeigen, dass der Code im „strict mode“ ausgeführt werden soll.
Im strict mode können Sie zum Beispiel keine nicht deklarierten Variablen verwenden.
Alle modernen Browser unterstützen „use strict“, außer Internet Explorer 9 und niedriger:
Directive |
|
|
|
|
|
„use strict“ |
13.0 |
10.0 |
4.0 |
6.0 |
12.1 |
Die Zahlen in der Tabelle geben die erste Browserversion an, die die Direktive vollständig unterstützt.
Sie können den Strict-Modus in allen Ihren Programmen verwenden. Er hilft Ihnen, saubereren Code zu schreiben, indem er z. B. verhindert, dass Sie nicht deklarierte Variablen verwenden.
"use strict"
ist nur eine Zeichenkette, so dass der IE 9 keinen Fehler wirft, auch wenn er sie nicht versteht.
Deklarieren des Strict-Modus
Der Strict-Modus wird durch das Hinzufügen von „use strict“; am Anfang eines Skripts oder einer Funktion deklariert.
Am Anfang eines Skripts deklariert, hat er globalen Umfang (der gesamte Code im Skript wird im Strict-Modus ausgeführt):
Beispiel
„use strict“;
x = 3.14; // Dies wird einen Fehler verursachen, da x nicht deklariert ist
Probieren Sie es selbst aus:
Beispiel
„use strict“;
myFunction();
Funktion myFunction() {
y = 3.14; // Dies führt ebenfalls zu einem Fehler, da y nicht deklariert ist
}
Probieren Sie es selbst aus “
Innerhalb einer Funktion deklariert, hat sie lokalen Gültigkeitsbereich (nur der Code innerhalb der Funktion ist im Strict-Modus):
x = 3.14; // Dies führt zu keinem Fehler.
meineFunktion();
Funktion meineFunktion() {
„use strict“;
y = 3.14; // Dies wird einen Fehler verursachen
}
Probieren Sie es selbst aus “
Die „use strict“; Syntax
Die Syntax, um den Strict-Modus zu deklarieren, wurde entworfen, um mit älteren Versionen von JavaScript kompatibel zu sein.
Das Kompilieren eines numerischen Literales (4 + 5;) oder eines String-Literales („John Doe“;) in einem JavaScript-Programm hat keine Nebeneffekte. Es wird einfach in eine nicht existierende Variable kompiliert und stirbt.
So ist "use strict";
nur für neue Compiler von Bedeutung, die die Bedeutung davon „verstehen“.
Warum Strict Mode?
Der Strict Mode macht es einfacher, „sicheres“ JavaScript zu schreiben.
Der Strict Mode verwandelt bisher akzeptierte „schlechte Syntax“ in echte Fehler.
Ein Beispiel: In normalem JavaScript erzeugt das Vertippen eines Variablennamens eine neue globale Variable. Im Strict-Modus wird dies einen Fehler auslösen, so dass es unmöglich ist, versehentlich eine globale Variable zu erstellen.
In normalem JavaScript erhält ein Entwickler keine Fehlerrückmeldung, wenn er nicht beschreibbaren Eigenschaften Werte zuweist.
Im Strict-Modus führt jede Zuweisung an eine nicht beschreibbare Eigenschaft, eine Getter-Only-Eigenschaft, eine nicht existierende Eigenschaft, eine nicht existierende Variable oder ein nicht existierendes Objekt zu einem Fehler.
Im strikten Modus nicht erlaubt
Eine Variable zu verwenden, ohne sie zu deklarieren, ist nicht erlaubt:
„use strict“;
x = 3.14; // Das führt zu einem Fehler
Versuchen Sie es selbst“
Objekte sind auch Variablen.
Ein Objekt zu verwenden, ohne es zu deklarieren, ist nicht erlaubt:
„use strict“;
x = {p1:10, p2:20}; // Das führt zu einem Fehler
Versuchen Sie es selbst „
Eine Variable (oder ein Objekt) zu löschen ist nicht erlaubt.
„use strict“;
var x = 3.14;
delete x; // Dies wird einen Fehler verursachen
Versuchen Sie es selbst “
Das Löschen einer Funktion ist nicht erlaubt.
„use strict“;
function x(p1, p2) {};
delete x; // Dies wird einen Fehler verursachen
Versuchen Sie es selbst „
Das Duplizieren eines Parameternamens ist nicht erlaubt:
„use strict“;
function x(p1, p1) {}; // Dies wird einen Fehler verursachen
Versuchen Sie es selbst „
Oktale numerische Literale sind nicht erlaubt:
„use strict“;
var x = 010; // Dies wird einen Fehler verursachen
Versuchen Sie es selbst „
Oktale Escape-Zeichen sind nicht erlaubt:
„use strict“;
var x = „\010“; // Dies führt zu einem Fehler
Versuchen Sie es selbst „
Das Schreiben auf eine schreibgeschützte Eigenschaft ist nicht erlaubt:
„use strict“;
var obj = {};
Object.defineProperty(obj, „x“, {value:0, writable:false});
obj.x = 3.14; // Das führt zu einem Fehler
Versuchen Sie es selbst:
Das Schreiben auf eine get-only-Eigenschaft ist nicht erlaubt:
„use strict“;
var obj = {get x() {return 0} };
obj.x = 3.14; // Dies führt zu einem Fehler
Versuchen Sie es selbst:
Das Löschen einer nicht löschbaren Eigenschaft ist nicht erlaubt:
„use strict“;
delete Object.prototype; // Dies führt zu einem Fehler
Versuchen Sie es selbst“
Das Wort eval
kann nicht als Variable verwendet werden:
„use strict“;
var eval = 3.14; // Dies wird einen Fehler verursachen
Versuchen Sie es selbst:
Das Wort arguments
kann nicht als Variable verwendet werden:
„use strict“;
var arguments = 3.14; // Dies führt zu einem Fehler
Versuchen Sie es selbst:
Die with
-Anweisung ist nicht erlaubt:
„use strict“;
with (Math){x = cos(2)}; // Dies führt zu einem Fehler
Versuchen Sie es selbst „
Aus Sicherheitsgründen ist es eval()
nicht erlaubt, Variablen in dem Bereich zu erstellen, aus dem es aufgerufen wurde:
„use strict“;
eval („var x = 2“);
alert (x); // Dies führt zu einem Fehler
Versuchen Sie es selbst „
Das this
-Schlüsselwort in Funktionen verhält sich im strict-Modus anders.
Das this
Schlüsselwort bezieht sich auf das Objekt, das die Funktion aufgerufen hat.
Wenn das Objekt nicht angegeben wird, geben Funktionen im Strict-Modus undefined
und Funktionen im normalen Modus das globale Objekt (Fenster) zurück:
„use strict“;
Funktion myFunction() {
alert(this); // meldet „undefined“
}
myFunction();
Versuchen Sie es selbst“
Zukunftsweisend!
Schlüsselwörter, die für zukünftige JavaScript-Versionen reserviert sind, können im Strict-Modus NICHT als Variablennamen verwendet werden.
Diese sind:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
„use strict“;
var public = 1500; // Dies führt zu einem Fehler
Versuchen Sie es selbst“
Aufpassen!
Die „use strict“-Direktive wird nur am Anfang eines Skripts oder einer Funktion erkannt.