8494 Stimmen

Was bedeutet "use strict" in JavaScript, und was ist der Grund dafür?

Kürzlich habe ich einen Teil meines JavaScript-Codes durch Crockfords JSLint und es wurde folgende Fehlermeldung ausgegeben:

Problem in Zeile 1 Zeichen 1: Fehlende "use strict"-Anweisung.

Bei meinen Recherchen habe ich festgestellt, dass manche Leute "use strict"; in ihren JavaScript-Code zu integrieren. Nachdem ich die Anweisung hinzugefügt hatte, trat der Fehler nicht mehr auf. Leider hat Google nicht viel über die Geschichte hinter dieser String-Anweisung verraten. Sicherlich muss es etwas damit zu tun haben, wie das JavaScript vom Browser interpretiert wird, aber ich habe keine Ahnung, welche Auswirkungen das haben könnte.

Was ist also "use strict"; worum geht es dabei, was bedeutet es, und ist es noch relevant?

Reagiert einer der aktuellen Browser auf die "use strict"; Zeichenfolge oder ist sie für die künftige Verwendung bestimmt?

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.

74voto

zangw Punkte 36978

Beim Hinzufügen von "use strict"; wird in den folgenden Fällen ein SyntaxFehler bevor das Skript ausgeführt wird:

  • Den Weg für künftige ECMAScript-Versionen ebnen unter Verwendung eines der neu reservierten Schlüsselwörter (in Vorbereitung für ECMAScript 6 ) : implements , interface , let , package , private , protected , public , static y yield .

  • Funktion in Blöcken deklarieren

    if(a<b){ function f(){} }
  • Oktal-Syntax

    var n = 023;
  • this zeigen auf das globale Objekt.

     function f() {
          "use strict";
          this.a = 1;
     };
     f(); 
  • Zweimal denselben Namen für einen Eigenschaftsnamen in einem Objektliteral deklarieren

     {a: 1, b: 3, a: 7} 

    Dies ist in ECMAScript 6 nicht mehr der Fall ( Wanze 1041128 ).

  • Deklaration von zwei Funktionsargumenten mit demselben Namen Funktion

    f(a, b, b){}
  • Setzen eines Wertes für eine nicht deklarierte Variable

    function f(x){
       "use strict";
       var a = 12;
       b = a + x*35; // error!
    }
    f();
  • Verwendung von delete auf einen Variablennamen delete myVariable;

  • Verwendung von eval o arguments als Name einer Variablen oder eines Funktionsarguments

    "use strict";
    arguments++;
    var obj = { set p(arguments) { } };
    try { } catch (arguments) { }
    function arguments() { } 

Quellen:

2 Stimmen

Mit ECMAScript 2015 sind doppelte Eigenschaftsnamen wieder erlaubt! Siehe MDN-Dokumentation .

71voto

Renganathan M G Punkte 4689

Im strikten Modus werden mehrere Änderungen an der normalen JavaScript-Semantik vorgenommen:

  • beseitigt einige stille JavaScript-Fehler, indem es sie ändert zu Fehlern machen.

  • behebt Fehler, die es für JavaScript schwierig machen Engines die Durchführung von Optimierungen erschweren.

  • verbietet einige Syntaxen, die wahrscheinlich in Zukunft definiert werden Versionen von ECMAScript definiert wird.

Für weitere Informationen besuchen Sie bitte Strikter Modus - Javascript

68voto

user2436758 Punkte 919

"Use Strict"; ist eine Versicherung, dass Programmierer nicht die losen oder schlechten Eigenschaften von JavaScript verwenden werden. Es ist ein Leitfaden, so wie ein Lineal Ihnen hilft, gerade Linien zu ziehen. "Use Strict" wird Ihnen helfen, "Straight Coding" zu machen.

Diejenigen, die es vorziehen, keine Lineale zu verwenden, um ihre Linien gerade zu ziehen, landen normalerweise auf diesen Seiten und bitten andere, ihren Code zu debuggen.

Glauben Sie mir. Der Overhead ist vernachlässigbar im Vergleich zu schlecht konzipiertem Code. Doug Crockford, der seit mehreren Jahren als leitender JavaScript-Entwickler tätig ist, hat hier einen sehr interessanten Beitrag veröffentlicht . Ich persönlich kehre immer wieder gerne auf seine Website zurück, um sicherzustellen, dass ich meine gute Praxis nicht vergesse.

In der modernen JavaScript-Praxis sollte immer das Pragma "Use Strict"; verwendet werden. Der einzige Grund, warum die ECMA-Gruppe den "Strict"-Modus optional gemacht hat ist es, weniger erfahrenen Programmierern den Zugang zu JavaScript zu ermöglichen und ihnen Zeit zu geben, sich an die neuen und sichereren Programmierpraktiken anzupassen.

60voto

Placeholder Punkte 4239

Einschließlich use strict am Anfang aller sensiblen JavaScript-Dateien ist eine kleine Möglichkeit, ein besserer JavaScript-Programmierer zu werden und zu vermeiden, dass zufällige Variablen global werden und sich Dinge stillschweigend ändern.

50voto

Heich-B Punkte 652

Zitat von w3schools :

Die "use strict"-Richtlinie

Die Anweisung "use strict" ist neu in JavaScript 1.8.5 (ECMAScript Version 5).

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

Der Zweck von "use strict" ist es, anzuzeigen, dass der Code im "Strict-Modus" ausgeführt werden soll.

Im Strict-Modus können Sie zum Beispiel keine nicht deklarierten Variablen verwenden.

Warum der strenge Modus?

Der strikte Modus macht es einfacher, "sicheres" JavaScript zu schreiben.

Der strenge Modus verwandelt zuvor akzeptierte "schlechte Syntax" in echte Fehler.

Ein Beispiel: In normalem JavaScript erzeugt das Vertippen eines Variablennamens eine neue globale Variable. Im Strict-Modus führt dies zu einem Fehler, und macht es unmöglich, versehentlich eine globale Variable zu erstellen.

Bei normalem JavaScript erhält ein Entwickler keine Fehlerrückmeldung bei der Zuweisung von Werten zu nicht beschreibbaren Eigenschaften.

Im strikten Modus wird jede Zuweisung zu einer nicht beschreibbaren Eigenschaft, einer Getter-Only-Eigenschaft, einer nicht existierenden Eigenschaft, einer nicht existierenden Variable oder ein nicht existierendes Objekt einen Fehler aus.

Bitte beachten Sie http://www.w3schools.com/js/js_strict.asp mehr wissen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X