Ein Wort der Warnung an alle hartgesottenen Programmierer: Die Anwendung "use strict"
zu bestehendem Code kann gefährlich sein! Es handelt sich nicht um einen Wohlfühl-Aufkleber, den man auf den Code kleben kann, um ihn "besser" zu machen. Mit dem "use strict"
pragma, wird der Browser plötzlich Ausnahmen an zufälligen Stellen auslösen, die er vorher nie ausgelöst hat, nur weil Sie an dieser Stelle etwas tun, was standardmäßiges/lockeres JavaScript fröhlich erlaubt, aber striktes JavaScript verabscheut! Sie können Strictness-Verletzungen in selten genutzten Aufrufen in Ihrem Code verstecken, die nur dann eine Ausnahme auslösen, wenn sie schließlich ausgeführt werden - z.B. in der Produktionsumgebung, die Ihre zahlenden Kunden nutzen!
Wenn Sie den Schritt wagen wollen, sollten Sie sich bewerben "use strict"
zusammen mit umfassenden Unit-Tests und einem streng konfigurierten JSHint-Build-Task, der Ihnen die Gewissheit gibt, dass es keine dunkle Ecke in Ihrem Modul gibt, die fürchterlich explodiert, nur weil Sie den Strict Mode aktiviert haben. Oder, hey, hier ist eine weitere Option: Fügen Sie einfach keine "use strict"
zu einem Ihrer Legacy-Codes hinzufügen, ist es so wahrscheinlich sicherer, ehrlich gesagt. DEFINITIV NICHT hinzufügen. "use strict"
zu Modulen, die Sie nicht besitzen oder pflegen, wie Module von Dritten.
Ich denke, auch wenn es ein tödliches Käfigtier ist, "use strict"
kann eine gute Sache sein, aber man muss es richtig machen. Der beste Zeitpunkt für eine strenge Vorgehensweise ist, wenn Ihr Projekt noch ganz neu ist und Sie ganz von vorne anfangen. Konfigurieren Sie JSHint/JSLint
mit allen Warnungen und Optionen so weit aufgedreht, wie es Ihr Team verkraften kann, ein gutes Build/Test/Assert-System du jour eingerichtet wie Grunt+Karma+Chai
und erst DANN beginnen Sie, alle Ihre neuen Module als "use strict"
. Seien Sie darauf vorbereitet, viele kleine Fehler und Warnungen zu beseitigen. Stellen Sie sicher, dass jeder den Ernst der Lage versteht, indem Sie den Build so konfigurieren, dass er fehlschlägt, wenn JSHint/JSLint
führt zu Verstößen.
Mein Projekt war kein Projekt auf der grünen Wiese, als ich die "use strict"
. Das Ergebnis ist, dass mein IDE voller roter Flecken ist, weil ich keine "use strict"
auf der Hälfte meiner Module, und JSHint beschwert sich darüber. Es ist eine Erinnerung an mich, was Refactoring ich in Zukunft tun sollte. Mein Ziel ist es, frei von roten Markierungen zu sein, weil alle meine fehlenden "use strict"
Aussagen, aber das ist noch Jahre entfernt.
73 Stimmen
Die Antworten hier sind alt, aber sie sind falsch. Der Hauptgrund für den Strict-Modus war nicht, um Programmierfehler zu verhindern - es war, JavaScript lexikalisch skaliert zu machen, so dass es statisch analysierbar sein könnte :]
5 Stimmen
Und der Grund für die seltsame Syntax (magische Zeichenkette als Anweisung) ist die Abwärtskompatibilität mit älteren JavaScript-Engines. Die Idee des strengen Modus ist es, einige problematische JavaScript-Sprachkonstrukte zu verbieten, aber die Interpretation des Codes nicht zu ändern, so dass die Ausführung identisch ist, unabhängig davon, ob die JavaScript-Engine den strengen Modus tatsächlich unterstützt oder nicht.