JS-Tutorial

JS-HAUS JS-Einführung JS Wohin JS-Ausgabe JS-Anweisungen JS-Syntax JS-Kommentare JS-Variablen JS Let JS Konst JS-Operatoren JS-Arithmetik JS-Aufgabe JS-Datentypen JS-Funktionen JS-Objekte JS-Ereignisse JS-Strings JS-String-Methoden Suche nach JS-Strings JS-String-Vorlagen JS-Nummern JS-Zahlenmethoden JS-Arrays JS-Array-Methoden JS-Array-Sortierung JS-Array-Iteration JS-Array-Konstante JS-Daten JS-Datumsformate JS Date Get-Methoden JS-Datumssatzmethoden JS Math JS Zufällig JS Boolesche Werte JS-Vergleiche JS-Bedingungen JS-Schalter JS-Schleife für JS-Schleife für In JS-Schleife für Of JS-Schleife While JS Pause JS-Iterables JS-Sets JS-Karten JS Typeof JS-Typkonvertierung JS Bitweise JS RegExp JS-Fehler JS-Bereich JS Heben Strenger JS-Modus JS dieses Schlüsselwort JS-Pfeilfunktion JS-Klassen JS JSON JS-Debugging JS-Styleguide JS Best Practices JS-Fehler JS-Leistung JS Reservierte Wörter

JS-Versionen

JS-Versionen JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Edge JS-Geschichte

JS-Objekte

Objektdefinitionen Objekteigenschaften Objektmethoden Objektanzeige Objektzugriffsmethoden Objektkonstruktoren Objekt-Prototypen Objekt-Iterables Objektsätze Objektkarten Objektreferenz

JS-Funktionen

Funktionsdefinitionen Funktionsparameter Funktionsaufruf Funktionsaufruf Funktion anwenden Funktionsschließungen

JS-Klassen

Klasse Einführung Klassenvererbung Klasse statisch

JS asynchron

JS-Rückrufe JS asynchron JS verspricht JS Async/Warten

JS-HTML-DOM

DOM-Einführung DOM-Methoden DOM-Dokument DOM-Elemente DOM-HTML DOM-Formulare DOM-CSS DOM-Animationen DOM-Ereignisse DOM-Ereignis-Listener DOM-Navigation DOM-Knoten DOM-Sammlungen DOM-Knotenlisten

Stückliste des JS-Browsers

JS-Fenster JS-Bildschirm JS-Standort JS-Geschichte JS-Navigator JS-Popup-Warnung JS-Timing JS-Cookies

JS-Web-APIs

Web-API-Einführung Web Forms-API Webprotokoll-API Webspeicher-API Web Worker-API Web-Fetch-API Web-Geolocation-API

JS AJAX

AJAX-Einführung AJAX-XMLHttp AJAX-Anfrage AJAX-Antwort AJAX-XML-Datei AJAX-PHP AJAX ASP AJAX-Datenbank AJAX-Anwendungen AJAX-Beispiele

JS JSON

JSON-Einführung JSON-Syntax JSON vs. XML JSON-Datentypen JSON-Parsing JSON-Stringify JSON-Objekte JSON-Arrays JSON-Server JSON-PHP JSON-HTML JSON JSONP

JS vs. jQuery

jQuery-Selektoren jQuery-HTML jQuery-CSS jQuery-DOM

JS-Grafik

JS-Grafik JS-Leinwand JS Plotly JS Chart.js JS Google-Diagramm JS D3.js

JS-Beispiele

JS-Beispiele JS-HTML-DOM JS-HTML-Eingabe JS-HTML-Objekte JS-HTML-Ereignisse JS-Browser JS-Editor JS-Übungen JS-Quiz JS-Zertifikat

JS-Referenzen

JavaScript-Objekte HTML-DOM-Objekte


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 evalkann nicht als Variable verwendet werden:

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

Das Wort argumentskann nicht als Variable verwendet werden:

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

Die withAussage 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 thisSchlüsselwort in Funktionen verhält sich im strikten Modus anders.

Das thisSchlüsselwort bezieht sich auf das Objekt, das die Funktion aufgerufen hat.

Wenn das Objekt nicht angegeben ist, geben Funktionen im strikten Modus undefinedund 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.