JavaScript „strikt verwenden“


Inhaltsverzeichnis

    Inhaltsverzeichnis anzeigen


"use strict"; Definiert das JavaScript-Code sollte in ausgeführt werden "strikter Modus".


Die „Verwendungsstrikt“-Richtlinie

Die Anweisung "use strict" war neu in ECMAScript Version 5.

Es handelt sich nicht um eine Anweisung, sondern um einen wörtlichen Ausdruck, der von früheren Versionen ignoriert wurde von JavaScript.

Der Zweck von "use strict" besteht darin, anzugeben, 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 Direktive vollständig unterstützt.

Sie können den strikten Modus in allen Ihren Programmen verwenden. Es hilft Ihnen, saubereren Code zu schreiben, Zum Beispiel, dass Sie daran gehindert werden, nicht deklarierte Variablen zu verwenden.

"use strict" ist nur eine Zeichenfolge, daher gibt IE 9 keinen Fehler aus, selbst wenn er ihn nicht versteht.


Deklarieren des strengen Modus

Der strikte Modus wird durch Hinzufügen von "use strict"; am Anfang von a deklariert Skript oder eine Funktion.

Es wird am Anfang eines Skripts deklariert und hat einen globalen Geltungsbereich (alle Codes). im Skript wird im strikten Modus ausgeführt):

Beispiel

"use strict";
x = 3.14;       // This will cause an error 
 because x is not declared

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Using a variable without declaring it, is not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
x = 3.14;  // This will cause an error (x is not defined).
</script>

</body>
</html>

Beispiel

"use strict";
myFunction();

function myFunction() {
   y = 3.14;   // This will also cause an error 
 because y is not declared
}

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>Global "use strict" declaration.</h2>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
myFunction();

function myFunction() {
  y = 3.14;   // This will cause an error (y is not defined)
}
</script>

</body>
</html>

Innerhalb einer Funktion deklariert, hat es einen lokalen Gültigkeitsbereich (nur der Code innerhalb der Funktion ist gültig). im strengen Modus):

x = 3.14;       // This will not cause an error.
 
myFunction();
function 
 myFunction() {
  "use strict";
    y = 3.14;   // This will cause an error
}

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<p>"use strict" in a function will only cause errors in that function.</p>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
x = 3.14;    // This will not cause an error.
myFunction();

function myFunction() {
  "use strict";
  y = 3.14;  // This will cause an error (y is not defined).
}
</script>

</body>
</html>


Die „strikte Verwendung“; Syntax

Die Syntax zum Deklarieren des strikten Modus wurde so konzipiert, dass sie mit kompatibel ist ältere Versionen von JavaScript.

Kompilieren eines numerischen Literals (4 + 5;) oder eines String-Literals („John Doe“;) in a Das JavaScript-Programm hat keine Nebenwirkungen. Es wird einfach zu einem nicht vorhandenen kompiliert variabel und stirbt.

Daher ist "use strict"; nur für neue Compiler von Bedeutung, die die Bedeutung „verstehen“. davon.


Warum strikter Modus?

Der strikte Modus erleichtert das Schreiben von „sicherem“ JavaScript.

Der strikte Modus verwandelt bisher akzeptierte „schlechte Syntax“ in echte Fehler.

Beispielsweise wird in normalem JavaScript durch die falsche Eingabe eines Variablennamens ein neuer Variablenname erstellt Globale Variable. Im strikten Modus wird dadurch ein Fehler ausgegeben, der dies unmöglich macht versehentlich eine globale Variable erstellen.

In normalem JavaScript erhält ein Entwickler keine Fehlerrückmeldung Zuweisen von Werten zu nicht beschreibbaren Eigenschaften.

Im strikten Modus ist jede Zuweisung an eine nicht beschreibbare Eigenschaft ein reiner Getter Eigenschaft, eine nicht vorhandene Eigenschaft, eine nicht vorhandene Variable oder eine nicht vorhandene Objekt, wird einen Fehler auslösen.


Im strengen Modus nicht zulässig

Die Verwendung einer Variablen ohne Deklaration ist nicht zulässig:

"use strict";
 x = 3.14;                // This will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Using a variable without declaring it, is not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
x = 3.14;  // This will cause an error (x is not defined).
</script>

</body>
</html>

Auch Objekte sind Variablen.

Die Verwendung eines Objekts ohne Deklaration ist nicht zulässig:

"use strict";
 x = {p1:10, p2:20};      // This will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Using an object without declaring it, is not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
x = {p1:10, p2:20};   // This will cause an error (x is not defined).
</script>

</body>
</html>

Das Löschen einer Variablen (oder eines Objekts) ist nicht zulässig.

"use strict";
let x = 3.14;
delete x;                // This 
will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With &quot;use strict&quot;:</h2>
<h3>Deleting a variable (or object) is not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
let x = 3.14;
delete x;     // This will cause an error 
</script>

</body>
</html>

Das Löschen einer Funktion ist nicht zulässig.

"use strict";
function x(p1, p2) {}; 
delete x;                
 // This will cause an error 

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Deleting a function is not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
function x(p1, p2) {}; 
delete x;        // This will cause an error 
</script>

</body>
</html>

Das Duplizieren eines Parameternamens ist nicht zulässig:

"use strict";
function x(p1, p1) {};   // This will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Duplicating a parameter name is not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
function x(p1, p1) {};   // This will cause an error 
</script>

</body>
</html>

Oktale numerische Literale sind nicht zulässig:

"use strict";
let x = 010;             // This 
will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Octal numeric literals are not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
let x = 010;   // This will cause an error 
</script>

</body>
</html>

Oktale Escape-Zeichen sind nicht zulässig:

"use strict";
let x = "\010";            // This will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Octal escape characters are not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
let x = "\010";   // This will cause an error 
</script>

</body>
</html>

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

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Writing to a read-only property is not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;   // This will cause an error
</script>

</body>
</html>

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

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Writing to a get-only property is not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
const obj = {get x() {return 0} };

obj.x = 3.14;   // This will cause an error
</script>

</body>
</html>

Das Löschen einer nicht löschbaren Eigenschaft ist nicht zulässig:

"use strict";
delete Object.prototype; // This will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Deleting an udeletable property is not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
delete Object.prototype;   // This will cause an error 
</script>

</body>
</html>

Das Wort eval kann nicht als Variable verwendet werden:

"use strict";
let eval = 3.14;         // This will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>The string "eval" cannot be used as a variable.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
let eval = 3.14;   // This will cause an error 
</script>

</body>
</html>

Das Wort arguments kann nicht als Variable verwendet werden:

"use strict";
let arguments = 3.14;    // This will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>The string "arguments" cannot be used as a variable.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
let arguments = 3.14;   // This will cause an error 
</script>

</body>
</html>

Die with-Anweisung ist nicht zulässig:

"use strict";
with (Math){x = cos(2)}; // This will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>The with statement is not allowed.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
with (Math){x = cos(2)};   // This will cause an error 
</script>

</body>
</html>

Aus Sicherheitsgründen darf eval() nicht erstellt werden Variablen in dem Bereich, aus dem es aufgerufen wurde.

Im strikten Modus kann eine Variable nicht verwendet werden, bevor sie deklariert wurde:

"use strict";
eval ("x = 2");
alert (x);      // This 
will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>For security reasons, eval() is not allowed to create variables in the scope from which it was called.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
eval ("x = 2");
alert (x);      // This will cause an error 
</script>

</body>
</html>

Im strikten Modus kann eval() keine Variable mit dem Schlüsselwort var deklarieren:

"use strict";
eval ("var x = 2");
alert (x);    // This 
will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>For security reasons, eval() is not allowed to create variables in the scope from which it was called.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
eval ("var x = 2");
alert (x);      // This will cause an error 
</script>

</body>
</html>

eval() kann keine Variable mit dem Schlüsselwort let deklarieren:

eval ("let x = 2");
alert (x);        // This 
will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>Using eval()</h2>
<h3>For security reasons, eval() is not allowed to create variables in the scope from which it was called.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
eval ("let x = 2");
alert (x);      // This will cause an error 
</script>

</body>
</html>

Das Schlüsselwort this in Funktionen verhält sich anders im strikten Modus.

Das Schlüsselwort this bezieht sich auf das Objekt, das die Funktion aufgerufen.

Wenn das Objekt nicht angegeben ist, funktioniert es im strikten Modus gibt undefiniert zurück und funktioniert normal mode gibt das globale Objekt (Fenster) zurück:

"use strict";
function myFunction() {
  
  alert(this); // will alert "undefined"
}
myFunction(); 

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Inside functions, the "this" keyword is no longer the global object if not specified:</h3>

<script>
"use strict";
function myFunction() {
  alert(this);
}
myFunction();
</script>

</body>
</html>

Zukunftssicher!

Schlüsselwörter, die für zukünftige JavaScript-Versionen reserviert sind, können NICHT als Variable verwendet werden Namen im strikten Modus.

Diese sind:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
let public = 1500;      // This will cause an error

Probieren Sie es selbst aus →

<!DOCTYPE html>
<html>
<body>

<h2>With "use strict":</h2>
<h3>Future reserved keywords are not allowed in strict mode.</h3>

<p>Activate debugging in your browser (F12) to see the error report.</p>

<script>
"use strict";
let public = 1500;   // This will cause an error 
</script>

</body>
</html>

Achtung!

Die „use strict“-Anweisung wird nur am Anfang eines Skripts erkannt oder eine Funktion.