JavaScript streng verwenden
"use strict";
Definiert, dass JavaScript-Code im "strikten Modus" ausgeführt werden soll.
Die „Use Strict“-Richtlinie
Die "use strict"
Direktive war neu in ECMAScript Version 5.
Es ist keine Anweisung, sondern ein wörtlicher Ausdruck, der von früheren Versionen von JavaScript ignoriert wurde.
Der Zweck von "use strict"
besteht darin, anzuzeigen, dass der Code im "strikten Modus" ausgeführt werden soll.
Im strikten Modus können Sie beispielsweise 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 Richtlinie vollständig unterstützt.
Sie können den strikten Modus in allen Ihren Programmen verwenden. Es hilft Ihnen, saubereren Code zu schreiben und Sie daran zu hindern, nicht deklarierte Variablen zu verwenden.
"use strict"
ist nur eine Zeichenfolge, sodass IE 9 keinen Fehler ausgibt, selbst wenn er ihn nicht versteht.
Deklaration des strikten Modus
Der strikte Modus wird durch Hinzufügen von "use strict" deklariert; an den Anfang eines Skripts oder einer Funktion.
Am Anfang eines Skripts deklariert, hat es einen globalen Geltungsbereich (der gesamte Code im Skript wird im strikten Modus ausgeführt):
Beispiel
"use strict";
x = 3.14; // This will cause an error
because x is not declared
Beispiel
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
Innerhalb einer Funktion deklariert, hat sie einen lokalen Geltungsbereich (nur der Code innerhalb der Funktion befindet sich im strikten Modus):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
Die "Verwendung strikt"; Syntax
Die Syntax zum Deklarieren des strikten Modus wurde so konzipiert, dass sie mit älteren Versionen von JavaScript kompatibel ist.
Das Kompilieren eines numerischen Literals (4 + 5;) oder eines String-Literals ("John Doe";) in einem JavaScript-Programm hat keine Seiteneffekte. Es wird einfach in eine nicht vorhandene Variable kompiliert und stirbt.
Ist also "use strict";
nur für neue Compiler von Bedeutung, die die Bedeutung davon "verstehen".
Warum strenger Modus?
Der strikte Modus erleichtert das Schreiben von "sicherem" JavaScript.
Der strikte Modus verwandelt zuvor akzeptierte "schlechte Syntax" in echte Fehler.
Beispielsweise wird in normalem JavaScript durch die falsche Eingabe eines Variablennamens eine neue globale Variable erstellt. Im strikten Modus wird dadurch ein Fehler ausgegeben, wodurch es unmöglich wird, versehentlich eine globale Variable zu erstellen.
In normalem JavaScript erhält ein Entwickler keine Fehlerrückmeldung, wenn er nicht beschreibbaren Eigenschaften Werte zuweist.
Im strikten Modus wird jede Zuweisung an eine nicht schreibbare Eigenschaft, eine Nur-Getter-Eigenschaft, eine nicht vorhandene Eigenschaft, eine nicht vorhandene Variable oder ein nicht vorhandenes Objekt einen Fehler auslösen.
Im strikten Modus nicht zulässig
Es ist nicht erlaubt, eine Variable zu verwenden, ohne sie zu deklarieren:
"use strict";
x = 3.14; // This will cause an error
Auch Objekte sind Variablen.
Es ist nicht erlaubt, ein Objekt zu verwenden, ohne es zu deklarieren:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
Das Löschen einer Variablen (oder eines Objekts) ist nicht erlaubt.
"use strict";
let x = 3.14;
delete x; // This
will cause an error
Das Löschen einer Funktion ist nicht erlaubt.
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
Das Duplizieren eines Parameternamens ist nicht zulässig:
"use strict";
function x(p1, p1) {}; // This will cause an error
Oktale numerische Literale sind nicht erlaubt:
"use strict";
let x = 010; // This
will cause an error
Oktale Escape-Zeichen sind nicht erlaubt:
"use strict";
let x = "\010"; // This will cause an error
Das Schreiben in eine schreibgeschützte Eigenschaft ist nicht zulässig:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
Das Schreiben in eine Nur-Get-Eigenschaft ist nicht zulässig:
"use strict";
const obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
Das Löschen einer nicht löschbaren Eigenschaft ist nicht zulässig:
"use strict";
delete Object.prototype; // This will cause an error
Das Wort eval
kann nicht als Variable verwendet werden:
"use strict";
let eval = 3.14; // This will cause an error
Das Wort arguments
kann nicht als Variable verwendet werden:
"use strict";
let arguments = 3.14; // This will cause an error
Die with
Aussage ist nicht erlaubt:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
Aus Sicherheitsgründen eval()
ist es nicht erlaubt, Variablen in dem Bereich zu erstellen, aus dem sie aufgerufen wurde:
"use strict";
eval ("let x = 2");
alert (x); // This
will cause an error
Das this
Schlüsselwort in Funktionen verhält sich im strikten Modus anders.
Das this
Schlüsselwort bezieht sich auf das Objekt, das die Funktion aufgerufen hat.
Wenn das Objekt nicht angegeben ist, geben Funktionen im strikten Modus undefined
und Funktionen im normalen Modus das globale Objekt (Fenster) zurück:
"use strict";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
Zukunftssicher!
Schlüsselwörter, die für zukünftige JavaScript-Versionen reserviert sind, können im strikten Modus NICHT als Variablennamen verwendet werden.
Diese sind:
- implementiert
- Schnittstelle
- Lassen
- Paket
- Privatgelände
- geschützt
- allgemein
- statisch
- Ertrag
"use strict";
let public = 1500; // This will cause an error
Achtung!
Die Direktive „use strict“ wird nur am Anfang eines Skripts oder einer Funktion erkannt.