"use strict" in JavaScript: Schützt es vor Fehlern? Vollständige Analyse

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist "use strict" in JavaScript und warum wird darüber diskutiert?

\n\n

Haben Sie jemals JavaScript-Code geschrieben, der sich "irgendwie seltsam" verhalten hat? Eine Variable hat sich von selbst deklariert, this zeigte auf das globale Objekt, statt auf das, was Sie erwartet haben, und ein Fehler wurde einfach stillschweigend geschluckt? Willkommen in der Welt des "schmutzigen" JS.

\n\n

Die Direktive "use strict" ist weder eine Funktion noch ein Operator. Sie ist buchstäblich ein Modusschalter für Ihr Skript oder Ihre Funktion. Wenn Sie "use strict" am Anfang einer Datei oder Funktion schreiben, sagen Sie der JavaScript-Engine: "Hey, vergib mir meine Fehler nicht. Sei strenger, aber ehrlicher."

\n\n

Dieses Thema ist eine der beliebtesten Fragen auf Stack Overflow (tausende Aufrufe). Lassen Sie uns analysieren, was der strikte Modus genau bewirkt, warum er erfunden wurde und wie Sie mit seiner Hilfe vermeiden, sich ins eigene Bein zu schießen.

\n\n

Wie schaltet man den strikten Modus ein?

\n\n

Es gibt nur zwei Möglichkeiten:

\n\n
    \n
  • Global (für das gesamte Skript): "use strict"; in der ersten Zeile der Datei.
  • \n
  • Lokal (für eine Funktion): "use strict"; in der ersten Zeile des Funktionskörpers.
  • \n
\n\n
// Globaler strikter Modus\n"use strict";\nlet x = 10;\n\n// Lokaler strikter Modus\nfunction myFunc() {\n  "use strict";\n  let y = 20;\n}
\n\n

Wichtig: Wenn Sie strikten und nicht-strikten Code in derselben Datei mischen (z.B. Skripte zusammenfügen), können Probleme auftreten. Es ist besser, den strikten Modus für einzelne Funktionen oder Module zu verwenden (ES6-Module sind automatisch strikt).

\n\n

Die Top-5 Fehler, die "use strict" verhindert

\n\n

Das Hauptziel von "use strict" ist es, "stille" JavaScript-Fehler in explizite Ausnahmen (Fehler, die ausgelöst und abgefangen werden können) umzuwandeln. Hier sind die 5 häufigsten Fälle.

\n\n

1. Verbot der impliziten Erstellung globaler Variablen

\n\n

Das ist ein Klassiker. Im normalen Modus wird eine Variable automatisch global, wenn Sie vergessen, var, let oder const zu schreiben. Dies kann zu schwer auffindbaren Bugs führen.

\n\n
// Ohne "use strict"\nfunction sum(a, b) {\n  total = a + b; // Fehler? Nein. total wurde zu einer globalen Variable!\n}\nsum(2, 3);\nconsole.log(total); // 5 — funktioniert, aber das ist schrecklich.\n\n// Mit "use strict"\n"use strict";\nfunction sumStrict(a, b) {\n  total = a + b; // ReferenceError: total is not defined\n}\nsumStrict(2, 3); // Fehler! Der Code stürzt sofort ab.
\n\n

Wie vermeiden? Deklarieren Sie Variablen immer. Verwenden Sie let und const anstelle von var, um Hoisting und versehentliche globale Variablen zu vermeiden.

\n\n

2. Zuweisung von Werten an nicht beschreibbare Eigenschaften

\n\n

Im normalen Modus ignoriert JavaScript stillschweigend den Versuch, NaN, undefined oder ein eingefrorenes Objekt zu ändern. Im strikten Modus wird ein Fehler ausgelöst.

\n\n
"use strict";\n\n// Versuch, NaN zu überschreiben\nNaN = 123; // TypeError: Cannot assign to read only property 'NaN'\n\n// Versuch, ein eingefrorenes Objekt zu ändern\nconst obj = Object.freeze({name: "Alice"});\nobj.name = "Bob"; // TypeError: Cannot assign to read only property 'name'
\n\n

Wie vermeiden? Versuchen Sie nicht, eingebaute Konstanten zu überschreiben. Verwenden Sie Object.freeze() bewusst.

\n\n

3. Löschen von Variablen, Funktionen und Argumenten

\n\n

Sie können eine mit var oder let deklarierte Variable oder eine Funktion nicht löschen. Im normalen Modus wird dies einfach ignoriert.

\n\n
"use strict";\n\nvar x = 10;\ndelete x; // SyntaxError: Delete of an unqualified identifier in strict mode.\n\nfunction foo() {}\ndelete foo; // SyntaxError
\n\n

Wie vermeiden? Verwenden Sie delete nicht für Variablen. Es wird nur zum Löschen von Objekteigenschaften benötigt: delete obj.prop.

\n\n

4. Doppelte Parameter von Fun

Blogs

Buchempfehlungen