Kürzlich habe ich einen Teil meines JavaScript-Codes über Crockfords JSLint ausgeführt und dabei den folgenden Fehler ausgegeben:
Problem in Zeile 1, Zeichen 1: Fehlende Anweisung "use strict".
Beim Suchen wurde mir klar, dass einige Leute "use strict";
ihren JavaScript-Code ergänzen . Nachdem ich die Anweisung hinzugefügt hatte, wurde der Fehler nicht mehr angezeigt. Leider hat Google nicht viel von der Geschichte hinter dieser Zeichenfolgenanweisung enthüllt. Natürlich muss es etwas damit zu tun haben, wie das JavaScript vom Browser interpretiert wird, aber ich habe keine Ahnung, wie sich das auswirken würde.
Was ist also "use strict";
alles um, was bedeutet es bedeutet, und es ist immer noch relevant?
Reagiert einer der aktuellen Browser auf die "use strict";
Zeichenfolge oder ist er für die zukünftige Verwendung vorgesehen?
quelle
"use strict";
Allein zu verwenden macht JS nicht lexikalisch. Das Deklarieren von Variablen mitlet
undconst
sollte ebenfalls verwendet werden.Antworten:
Dieser Artikel über den strengen Javascript-Modus könnte Sie interessieren: John Resig - ECMAScript 5 Strict Mode, JSON und mehr
Um einige interessante Teile zu zitieren:
Und:
Beachten Sie auch, dass Sie den "strengen Modus" auf die gesamte Datei anwenden können ... Oder Sie können ihn nur für eine bestimmte Funktion verwenden (zitiert immer noch aus John Resigs Artikel) :
Was hilfreich sein kann, wenn Sie alten und neuen Code mischen müssen ;-)
Ich nehme an, es ist ein bisschen wie das, was
"use strict"
Sie in Perl verwenden können (daher der Name?) : Es hilft Ihnen, weniger Fehler zu machen, indem es mehr Dinge erkennt, die zu Brüchen führen können.Der strikte Modus wird jetzt von allen gängigen Browsern unterstützt .
In nativen ECMAScript-Modulen (mit
import
undexport
Anweisungen) und ES6-Klassen ist der strikte Modus immer aktiviert und kann nicht deaktiviert werden.quelle
"use strict"
in Firefox 3.6, Safari 5, Chrome 7 und Opera 10.6 (alle Mac) ungültig ist . Keine Fehler, daher wird 'use strict' noch in keinem Browser unterstützt. Nicht in IE9 getestet;)Es ist eine neue Funktion von ECMAScript 5. John Resig hat eine schöne Zusammenfassung davon geschrieben.
Es ist nur eine Zeichenfolge, die Sie in Ihre JavaScript-Dateien einfügen (entweder oben in Ihrer Datei oder innerhalb einer Funktion) und die folgendermaßen aussieht:
Das Einfügen in Ihren Code sollte bei aktuellen Browsern keine Probleme verursachen, da es sich nur um eine Zeichenfolge handelt. Es kann in Zukunft Probleme mit Ihrem Code verursachen, wenn Ihr Code das Pragma verletzt. Wenn Sie zum Beispiel derzeit keine
foo = "bar"
Definition haben, schlägtfoo
Ihr Code fehl ... was meiner Meinung nach eine gute Sache ist.quelle
<script>"use strict";
. Das Flag gilt nur für den Block, in dem es enthalten ist.'use strict';
stattdessen"use strict";
wird es stattdessen fehlschlagen. Dies ist sinnvoller, da dies beim Hinzufügen zum globalen Objekt möglicherweise nicht funktioniert, wenn Sie die Funktion das nächste Mal ausführen / etwas anderes tun, das den Block zurücksetzt, da er sich im höchsten Block (global) befindet.Die Anweisung
"use strict";
weist den Browser an, den Strict-Modus zu verwenden, bei dem es sich um einen reduzierten und sichereren Funktionsumfang von JavaScript handelt.Liste der Funktionen (nicht vollständig)
Verbietet globale Variablen. (Fängt fehlende
var
Deklarationen und Tippfehler in Variablennamen ab)Stille fehlgeschlagene Zuweisungen führen zu Fehlern im strengen Modus (Zuweisung
NaN = 5;
)Versuche, nicht löschbare Eigenschaften zu löschen, führen zu (
delete Object.prototype
)Erfordert, dass alle Eigenschaftsnamen in einem Objektliteral eindeutig sind (
var x = {x1: "1", x1: "2"}
)Funktionsparameternamen müssen eindeutig sein (
function sum (x, x) {...}
)Verbietet die oktale Syntax (
var x = 023;
einige Entwickler gehen fälschlicherweise davon aus, dass eine vorhergehende Null nichts zur Änderung der Zahl beiträgt.)Verbietet das
with
Schlüsselworteval
Im strengen Modus werden keine neuen Variablen eingeführtVerbietet das Löschen von einfachen Namen (
delete x;
)Verbietet das Binden oder Zuweisen der Namen
eval
undarguments
in jeglicher FormDer strikte Modus vergleicht die Eigenschaften des
arguments
Objekts nicht mit den formalen Parametern. (dh infunction sum (a,b) { return arguments[0] + b;}
Dies funktioniert, weilarguments[0]
gebunden ista
und so weiter.)arguments.callee
wird nicht unterstützt[Ref: Strenger Modus , Mozilla Developer Network ]
quelle
window.foo = bar
).Wenn die Leute sich Sorgen um die Verwendung
use strict
machen, lohnt es sich möglicherweise, diesen Artikel zu lesen:ECMAScript 5 'Strenger Modus' Unterstützung in Browsern. Was bedeutet das?
NovoGeek.com - Krishnas Weblog
Es geht um Browserunterstützung, aber was noch wichtiger ist, wie man sicher damit umgeht:
quelle
window
this
dem Sie nicht zielen könnenwindow
?this
gehört zu seiner eigenen Funktion und nicht zum globalen Fensterthis
ist man eigentlichundefined
.Ein Wort der Vorsicht, alle hart aufgeladenen Programmierer: Das Anwenden
"use strict"
auf vorhandenen Code kann gefährlich sein! Bei diesem Ding handelt es sich nicht um einen Aufkleber zum Wohlfühlen und zum glücklichen Gesicht, auf den Sie den Code klopfen können, um ihn "besser" zu machen. Mit dem"use strict"
Pragma wird der Browser plötzlich Ausnahmen an zufälligen Stellen auslösen, die er noch nie zuvor ausgelöst hat, nur weil Sie an dieser Stelle etwas tun, das standardmäßiges / loses JavaScript gerne zulässt, aber striktes JavaScript verabscheut! Möglicherweise haben Sie Verstöße gegen die Strenge, die sich in selten verwendeten Aufrufen in Ihrem Code verstecken und nur dann eine Ausnahme auslösen, wenn sie schließlich ausgeführt werden - beispielsweise in der Produktionsumgebung, die Ihre zahlenden Kunden verwenden!Wenn Sie den Sprung
"use strict"
wagen wollen, ist es eine gute Idee, sich neben umfassenden Komponententests und einer streng konfigurierten JSHint-Build-Aufgabe zu bewerben , die Ihnen die Gewissheit gibt, dass es keine dunkle Ecke Ihres Moduls gibt, die nur wegen Ihnen schrecklich explodiert Ich habe den Strict Mode aktiviert. Oder, hey, hier ist eine andere Option: Fügen Sie einfach keinen"use strict"
Ihrer Legacy-Codes hinzu, es ist wahrscheinlich sicherer, ehrlich. DEFINITIV KEINE"use strict"
Module hinzufügen , die Sie nicht besitzen oder warten, wie z. B. Module von Drittanbietern.Ich denke, obwohl es ein tödliches Tier im Käfig ist,
"use strict"
kann es gutes Zeug sein, aber man muss es richtig machen. Die beste Zeit, um streng zu werden, ist, wenn Ihr Projekt auf der grünen Wiese steht und Sie bei Null anfangen. Konfigurieren SieJSHint/JSLint
mit allen Warnungen und Optionen, die so eng wie möglich sind, ein gutes Build- / Test- / Assert-System, wie Sie es sich vorgenommen habenGrunt+Karma+Chai
, und markieren Sie erst dann alle Ihre neuen Module als"use strict"
. Seien Sie bereit, viele kleine Fehler und Warnungen zu beheben. Stellen Sie sicher, dass jeder die Schwerkraft versteht, indem Sie den Build auf FAIL konfigurieren, wennJSHint/JSLint
Verstöße auftreten.Mein Projekt war kein Greenfield-Projekt, als ich es adoptierte
"use strict"
. Infolgedessen ist meine IDE voller roter Markierungen, da ich nicht die"use strict"
Hälfte meiner Module habe, und JSHint beschwert sich darüber. Es erinnert mich daran, was ich in Zukunft tun sollte. Mein Ziel ist es, aufgrund all meiner fehlenden"use strict"
Aussagen frei von roten Flecken zu sein , aber das ist jetzt Jahre entfernt.quelle
"use strict";
vorhandenen Code hinzu. Davon abgesehen werde ich es fast immer verwenden, wenn ich neuen Code von Grund auf neu schreibeDie Verwendung
'use strict';
verbessert Ihren Code nicht plötzlich.Der strikte JavaScript-Modus ist eine Funktion in ECMAScript 5 . Sie können den strengen Modus aktivieren, indem Sie dies oben in Ihrem Skript / Ihrer Funktion deklarieren.
Wenn eine JavaScript-Engine diese Anweisung sieht , beginnt sie, den Code in einem speziellen Modus zu interpretieren. In diesem Modus werden Fehler ausgelöst, wenn bestimmte Codierungspraktiken erkannt werden, die potenzielle Fehler darstellen können (was die Begründung für den strengen Modus ist).
Betrachten Sie dieses Beispiel:
In ihrer Besessenheit, die numerischen Literale auszurichten, hat der Entwickler die Variable versehentlich
b
mit einem oktalen Literal initialisiert . Im nicht strengen Modus wird dies als numerisches Literal mit Wert24
(in Basis 10) interpretiert . Der strikte Modus löst jedoch einen Fehler aus.Eine nicht erschöpfende Liste von Spezialitäten im strengen Modus finden Sie in dieser Antwort .
Wo soll ich verwenden
'use strict';
?In meiner neuen JavaScript-Anwendung: Absolut! Der strikte Modus kann als Whistleblower verwendet werden, wenn Sie etwas Dummes mit Ihrem Code tun.
In meinem vorhandenen JavaScript-Code: Wahrscheinlich nicht! Wenn Ihr vorhandener JavaScript-Code Anweisungen enthält, die im strengen Modus verboten sind, wird die Anwendung einfach unterbrochen. Wenn Sie einen strengen Modus wünschen, sollten Sie bereit sein, Ihren vorhandenen Code zu debuggen und zu korrigieren. Aus diesem Grund verwenden
'use strict';
nicht plötzlich Ihren Code besser machen .Wie verwende ich den strengen Modus?
Fügen Sie eine
'use strict';
Anweisung über Ihrem Skript ein:Beachten Sie, dass alles in der Datei
myscript.js
im strengen Modus interpretiert wird.Oder fügen Sie eine
'use strict';
Anweisung über Ihren Funktionskörper ein:Alles im lexikalischen Funktionsumfang
doSomething
wird im strengen Modus interpretiert. Das Wort lexikalischer Geltungsbereich ist hier wichtig. Wenn Ihr strenger Code beispielsweise eine Funktion einer Bibliothek aufruft, die nicht streng ist , wird nur Ihr Code im strengen Modus ausgeführt und nicht die aufgerufene Funktion. Siehe diese Antwort für eine bessere Erklärung.Welche Dinge sind im strengen Modus verboten?
Ich habe einen schönen Artikel gefunden , der einige Dinge beschreibt, die im strengen Modus verboten sind (beachten Sie, dass dies keine exklusive Liste ist):
Reservierte Wörter für zukünftige JavaScript-Versionen
ECMAScript 5 fügt eine Liste reservierter Wörter hinzu. Wenn Sie sie als Variablen oder Argumente verwenden, gibt der strikte Modus einen Fehler aus. Die reservierten Wörter sind:
Weiterführende Literatur
quelle
'use strict'
Direktive verfügt, werden diese im nicht strengen Modus ausgeführt, selbst wenn sie von einer Funktion aufgerufen werden, die im strengen Modus ausgeführt wird. Eine Erklärung finden Sie in dieser Antwort .this
). Jetzt sehe ich, dass Sie sich darauf bezogen haben, andere Funktionen aufzurufen.Ich empfehle jedem Entwickler dringend, jetzt den strengen Modus zu verwenden. Es gibt genügend Browser, die dies unterstützen, sodass der strikte Modus uns zu Recht vor Fehlern bewahrt, von denen wir nicht einmal wussten, dass sie in Ihrem Code enthalten sind.
Anscheinend wird es im Anfangsstadium Fehler geben, auf die wir noch nie zuvor gestoßen sind. Um den vollen Nutzen zu erzielen, müssen wir nach dem Wechsel in den strengen Modus ordnungsgemäße Tests durchführen, um sicherzustellen, dass wir alles erfasst haben. Auf jeden Fall werfen wir nicht einfach
use strict
unseren Code ein und gehen davon aus, dass es keine Fehler gibt. Die Abwanderung ist also, dass es Zeit ist, diese unglaublich nützliche Sprachfunktion zu verwenden, um besseren Code zu schreiben.Zum Beispiel,
JSLint ist ein Debugger von Douglas Crockford. Fügen Sie einfach Ihr Skript ein und es wird schnell nach erkennbaren Problemen und Fehlern in Ihrem Code suchen.
quelle
Ich möchte eine etwas fundiertere Antwort anbieten, die die anderen Antworten ergänzt. Ich hatte gehofft, die beliebteste Antwort zu bearbeiten, bin aber gescheitert. Ich habe versucht, es so umfassend und vollständig wie möglich zu gestalten.
Weitere Informationen finden Sie in der MDN-Dokumentation .
"use strict"
eine in ECMAScript 5 eingeführte Richtlinie.Richtlinien ähneln Aussagen, unterscheiden sich jedoch.
use strict
enthält keine Schlüsselwörter: Die Direktive ist eine einfache Ausdrucksanweisung, die aus einem speziellen Zeichenfolgenliteral (in einfachen oder doppelten Anführungszeichen) besteht. JavaScript-Engines, die ECMAScript 5 nicht implementieren, sehen lediglich eine Ausdrucksanweisung ohne Nebenwirkungen. Es wird erwartet, dass zukünftige Versionen der ECMAScript-Standardsuse
als echtes Schlüsselwort eingeführt werden. Die Zitate würden dadurch überholt.use strict
kann nur am Anfang eines Skripts oder einer Funktion verwendet werden, dh es muss vor jeder anderen (realen) Anweisung stehen. Es muss nicht die erste Anweisung in einem Funktionsskript sein: Es können andere Anweisungsausdrücke vorangestellt werden, die aus Zeichenfolgenliteralen bestehen (und JavaScript-Implementierungen können sie als implementierungsspezifische Anweisungen behandeln). String-Literal-Anweisungen, die auf eine erste echte Anweisung (in einem Skript oder einer Funktion) folgen, sind einfache Ausdrucksanweisungen. Dolmetscher dürfen sie nicht als Richtlinien interpretieren und sie haben keine Wirkung.Die
use strict
Anweisung gibt an, dass der folgende Code (in einem Skript oder einer Funktion) strenger Code ist. Der Code auf der höchsten Ebene eines Skripts (Code, der nicht in einer Funktion enthalten ist) wird als strenger Code betrachtet, wenn das Skript eineuse strict
Direktive enthält . Der Inhalt einer Funktion wird als strenger Code betrachtet, wenn die Funktion selbst in einem strengen Code definiert ist oder wenn die Funktion eineuse strict
Direktive enthält . Code, der an eineeval()
Methode übergeben wird, gilt als strenger Code, wenneval()
er von einem strengen Code aufgerufen wurde oder dieuse strict
Direktive selbst enthält .Der strikte Modus von ECMAScript 5 ist eine eingeschränkte Teilmenge der JavaScript-Sprache, die relevante Sprachdefizite beseitigt und eine strengere Fehlerprüfung und höhere Sicherheit bietet. Im Folgenden werden die Unterschiede zwischen dem strengen Modus und dem normalen Modus aufgeführt (von denen die ersten drei besonders wichtig sind):
with
Anweisung nicht im strengen Modus verwenden.Object
, erhalten Sie einenReferenceError
. Im normalen Modus wird der Bezeichner implizit als globale Variable deklariert (als Eigenschaft der globalenObject
).this
den Wertundefined
in Funktionen, die als Funktionen (nicht als Methoden) aufgerufen wurden. (Im normalen Modus zeigtthis
immer auf die globaleObject
). Dieser Unterschied kann verwendet werden, um zu testen, ob eine Implementierung den strengen Modus unterstützt:Auch wenn eine Funktion mit
call()
oderapply
im strengen Modus aufgerufen wird ,this
ist dies genau der Wert des ersten Arguments des Aufrufscall()
oderapply()
. (Im Normalmodusnull
undundefined
werden durch die globale ersetztObject
und Werte, die nicht Objekte, sind gegossen in Objekte.)Im strengen Modus erhalten Sie ein
TypeError
, wenn Sie versuchen, schreibgeschützten Eigenschaften zuzuweisen oder neue Eigenschaften für ein nicht erweiterbares Objekt zu definieren. (Im normalen Modus schlagen beide einfach ohne Fehlermeldung fehl.)eval()
keine Variablen oder Funktionen im Bereich des Aufrufers deklarieren oder definieren (wie im normalen Modus). Stattdessen wird ein neuer Bereich für erstellteval()
und die Variablen und Funktionen befinden sich in diesem Bereich. Dieser Bereich wird nacheval()
Abschluss der Ausführung zerstört.SyntaxError
wenn demdelete
Operator eine nicht qualifizierte Kennung (eine Variable, eine Funktion oder ein Funktionsparameter) folgt. Im normalen Modus würde derdelete
Ausdruck nichts tun und wird ausgewertetfalse
.TypeError
wenn Sie versuchen, eine nicht konfigurierbare Eigenschaft zu löschen. (Im normalen Modus schlägt der Versuch einfach fehl und derdelete
Ausdruck wird ausgewertetfalse
).0x
. (Im normalen Modus erlauben einige Implementierungen oktale Literale.)eval
undarguments
wie Schlüsselwörter behandelt. Sie können ihren Wert nicht ändern, ihnen keinen Wert zuweisen und sie nicht als Namen für Variablen, Funktionen, Funktionsparameter oder Bezeichner eines catch-Blocks verwenden.arguments.caller
undarguments.callee
verursachen eineTypeError
in einer Funktion im strengen Modus. Darüber hinaus verursachen einige Aufrufer- und Argumenteigenschaften von Funktionen im strengen Modus ein,TypeError
wenn Sie versuchen, sie zu lesen.quelle
0
.Meine zwei Cent:
Eines der Ziele des strengen Modus ist es, ein schnelleres Debuggen von Problemen zu ermöglichen. Es hilft den Entwicklern, indem es Ausnahmen auslöst, wenn bestimmte falsche Dinge auftreten, die zu einem stillen und seltsamen Verhalten Ihrer Webseite führen können. In dem Moment, in dem wir
use strict
den Code verwenden, werden Fehler ausgegeben, die dem Entwickler helfen, ihn im Voraus zu beheben.Einige wichtige Dinge, die ich nach der Verwendung gelernt habe
use strict
:Verhindert die Deklaration globaler Variablen:
Dieser Code wird nun
nameoftree
im globalen Bereich erstellt, auf den mit zugegriffen werden kannwindow.nameoftree
. Wenn wiruse strict
den Code implementieren , würde dies einen Fehler auslösen.Sample
Beseitigt
with
Aussage:with
Anweisungen können nicht mit Tools wie uglify-js minimiert werden . Sie sind auch veraltet und werden aus zukünftigen JavaScript-Versionen entfernt.Sample
Verhindert Duplikate:
Wenn wir eine doppelte Eigenschaft haben, wird eine Ausnahme ausgelöst
Es gibt nur wenige mehr, aber ich muss mehr darüber lernen.
quelle
Wenn Sie einen Browser verwenden, der im letzten Jahr oder so veröffentlicht wurde, unterstützt er höchstwahrscheinlich den JavaScript Strict-Modus. Nur ältere Browser, bevor ECMAScript 5 zum aktuellen Standard wurde, unterstützen dies nicht.
Die Anführungszeichen um den Befehl stellen sicher, dass der Code auch in älteren Browsern funktioniert (obwohl die Dinge, die im strengen Modus einen Syntaxfehler erzeugen, im Allgemeinen nur dazu führen, dass das Skript in diesen älteren Browsern auf eine schwer zu erkennende Weise fehlerhaft funktioniert).
quelle
Beim Hinzufügen
"use strict";
wird in den folgenden Fällen ein SyntaxError ausgelöst, bevor das Skript ausgeführt wird:Ebnet den Weg für zukünftige Versionen ECMAScript , einer der neu reservierten Schlüsselwörter (in prevision für ECMAScript 6 ):
implements
,interface
,let
,package
,private
,protected
,public
,static
, undyield
.Funktion in Blöcken deklarieren
Oktale Syntax
this
Zeigen Sie auf das globale Objekt.Deklarieren des doppelten Namens für einen Eigenschaftsnamen in einem Objektliteral
Dies ist in ECMAScript 6 ( Fehler 1041128 ) nicht mehr der Fall .
Deklarieren von zwei Funktionsargumenten mit derselben Namensfunktion
Festlegen eines Werts für eine nicht deklarierte Variable
Verwenden
delete
eines Variablennamensdelete myVariable;
Verwenden von
eval
oderarguments
als Variablen- oder FunktionsargumentnameQuellen:
Übergang in den strengen Modus auf MDN
Strenger Modus auf MDN
Der strenge JavaScript-Modus und warum Sie ihn in Colin J. Ihrigs Blog verwenden sollten (archivierte Version)
quelle
Im strengen Modus werden verschiedene Änderungen an der normalen JavaScript-Semantik vorgenommen:
Beseitigt einige stille JavaScript-Fehler, indem sie geändert werden, um Fehler auszulösen.
behebt Fehler, die es JavaScript-Engines erschweren, Optimierungen durchzuführen.
verbietet eine Syntax, die wahrscheinlich in zukünftigen Versionen von ECMAScript definiert wird.
Weitere Informationen finden Sie unter Strict Mode-Javascript
quelle
"Verwenden Sie streng"; ist eine Versicherung, dass Programmierer die losen oder schlechten Eigenschaften von JavaScript nicht nutzen. Es ist eine Anleitung, genau wie ein Lineal Ihnen hilft, gerade Linien zu ziehen. "Use Strict" hilft Ihnen beim "Straight Coding".
Diejenigen, die es vorziehen, keine Lineale zu verwenden, um ihre Zeilen gerade zu machen, landen normalerweise auf diesen Seiten und fordern andere auf, ihren Code zu debuggen.
Glaube mir. Der Overhead ist im Vergleich zu schlecht entworfenem Code vernachlässigbar. Doug Crockford, der seit mehreren Jahren ein leitender JavaScript-Entwickler ist, hat hier einen sehr interessanten Beitrag . Persönlich kehre ich gerne die ganze Zeit zu seiner Website zurück, um sicherzustellen, dass ich meine gute Praxis nicht vergesse.
Die moderne JavaScript-Praxis sollte immer den "Use Strict" hervorrufen. Pragma. Der einzige Grund, warum die ECMA-Gruppe den "Strict" -Modus optional gemacht hat, besteht darin, weniger erfahrenen Codierern den Zugriff auf JavaScript zu ermöglichen und dann Zeit zu geben, sich an die neuen und sichereren Codierungspraktiken anzupassen.
quelle
Wenn
use strict
Sie ab diesem Punkt alle vertraulichen JavaScript-Dateien in den Anfang aufnehmen, können Sie ein kleinerer JavaScript-Programmierer sein und vermeiden, dass Zufallsvariablen global werden und sich die Dinge stillschweigend ändern.quelle
Zitat aus w3schools :
Weitere Informationen finden Sie unter http://www.w3schools.com/js/js_strict.asp
quelle
"use strict"
Lässt JavaScript-Code im strengen Modus laufen , was im Grunde bedeutet, dass vor der Verwendung alles definiert werden muss. Der Hauptgrund für die Verwendung des strengen Modus besteht darin, die versehentliche globale Verwendung undefinierter Methoden zu vermeiden.Auch im strengen Modus laufen die Dinge schneller, einige Warnungen oder stille Warnungen werfen schwerwiegende Fehler auf. Es ist besser, sie immer zu verwenden, um einen saubereren Code zu erstellen.
"use strict"
wird häufig für die Verwendung in ECMA5 benötigt. In ECMA6 ist es standardmäßig Teil von JavaScript , sodass es nicht hinzugefügt werden muss, wenn Sie ES6 verwenden.Schauen Sie sich diese Aussagen und Beispiele aus MDN an:
1) strenger Modus in Funktionen
2) Strict-Modus für das gesamte Skript
3) Zuordnung zu einem nicht beschreibbaren globalen
Sie können mehr über MDN lesen .
quelle
Einige Mitglieder des ECMAScript-Ausschusses sprechen gut darüber: Änderungen an JavaScript, Teil 1: ECMAScript 5 " darüber, wie die schrittweise Verwendung des
"use strict"
Schalters es JavaScript-Implementierern ermöglicht, viele der gefährlichen Funktionen von JavaScript zu bereinigen, ohne plötzlich jede Website zu beschädigen in der Welt.Natürlich geht es auch darum, was viele dieser Fehlfunktionen sind (waren) und wie ECMAScript 5 sie behebt.
quelle
Kleine Beispiele zum Vergleichen:
Nicht strenger Modus:
Strikter Modus:
Nicht strenger Modus:
quelle
this === 'a'
in beiden Beispielen?Beachten Sie, dass dies
use strict
in EcmaScript 5 eingeführt wurde und seitdem beibehalten wurde.Nachfolgend sind die Bedingungen aufgeführt, um den strengen Modus in ES6 und ES7 auszulösen :
quelle
Die Hauptgründe, warum Entwickler verwenden sollten,
"use strict"
sind:Verhindert die versehentliche Deklaration globaler Variablen. Durch die Verwendung
"use strict()"
wird sichergestellt, dass Variablenvar
vor der Verwendung mit deklariert werden. Z.B:"use strict"
Direktive wird nur am Anfang eines Skripts oder einer Funktion erkannt.Die Zeichenfolge
"arguments"
kann nicht als Variable verwendet werden:Beschränkt die Verwendung von Schlüsselwörtern als Variablen. Der Versuch, sie zu verwenden, führt zu Fehlern.
Kurz gesagt, Ihr Code wird weniger fehleranfällig und Sie schreiben guten Code.
Um mehr darüber zu lesen, können Sie hier verweisen .
quelle
"benutze streng"; ist die ECMA-Anstrengung, JavaScript ein bisschen robuster zu machen. Es bringt JS in den Versuch, es zumindest ein wenig "streng" zu machen (andere Sprachen implementieren seit den 90er Jahren strenge Regeln). Es "zwingt" JavaScript-Entwickler tatsächlich, eine Art von Best Practices für die Codierung zu befolgen. Trotzdem ist JavaScript sehr zerbrechlich. Es gibt keine typisierten Variablen, typisierten Methoden usw. Ich empfehle JavaScript-Entwicklern dringend, eine robustere Sprache wie Java oder ActionScript3 zu lernen und dieselben Best Practices in Ihren JavaScript-Code zu implementieren. Dies funktioniert besser und ist einfacher debuggen.
quelle
Der „strenge“ JavaScript-Modus wurde in ECMAScript 5 eingeführt.
Wenn Sie
"use strict";
ganz oben in Ihre JS-Datei schreiben, wird die strenge Syntaxprüfung aktiviert. Es erledigt folgende Aufgaben für uns:Zeigt einen Fehler an, wenn Sie versuchen, einer nicht deklarierten Variablen zuzuweisen
verhindert, dass Sie wichtige JS-Systembibliotheken überschreiben
verbietet einige unsichere oder fehleranfällige Sprachfunktionen
use strict
funktioniert auch innerhalb einzelner Funktionen. Es ist immer eine bessere Praxis,use strict
in Ihren Code aufzunehmen.Browserkompatibilitätsproblem: Die "use" -Anweisungen sollen abwärtskompatibel sein. Browser, die sie nicht unterstützen, sehen nur ein Zeichenfolgenliteral, auf das nicht weiter verwiesen wird. Also werden sie darüber hinweggehen und weitermachen.
quelle
use strict
Dies ist eine Möglichkeit, Ihren Code sicherer zu machen, da Sie keine gefährlichen Funktionen verwenden können, die möglicherweise nicht wie erwartet funktionieren. Und wie bereits geschrieben, wird der Code dadurch strenger.quelle
Use Strict wird verwendet, um häufige und wiederholte Fehler anzuzeigen, sodass sie unterschiedlich behandelt werden, und ändert die Art und Weise, wie Java-Skripte ausgeführt werden.
Verhindert versehentliche Globale
Keine Duplikate
Eliminiert mit
Beseitigt diesen Zwang
Sicherere Bewertung ()
Fehler für unveränderliche
Sie können diesen Artikel auch für Details lesen
quelle
Normalerweise folgt JavaScript keinen strengen Regeln, wodurch sich die Fehlerwahrscheinlichkeit erhöht. Nach der Verwendung
"use strict"
sollte der JavaScript-Code strengen Regeln wie in anderen Programmiersprachen folgen, z. B. Verwendung von Terminatoren, Deklaration vor der Initialisierung usw.Wenn
"use strict"
der Code verwendet wird, sollte er nach strengen Regeln geschrieben werden, um die Wahrscheinlichkeit von Fehlern und Mehrdeutigkeiten zu verringern.quelle
"benutze streng"; Definiert, dass JavaScript-Code im "strengen Modus" ausgeführt werden soll.
Alle modernen Browser unterstützen "use strict" mit Ausnahme von Internet Explorer 9 und niedriger .
Nachteil
Wenn ein Entwickler eine Bibliothek verwendet, die sich im strengen Modus befindet, der Entwickler jedoch daran gewöhnt ist, im normalen Modus zu arbeiten, ruft er möglicherweise einige Aktionen für die Bibliothek auf, die nicht wie erwartet funktionieren.
Schlimmer noch, da sich der Entwickler im normalen Modus befindet, hat er nicht die Vorteile, dass zusätzliche Fehler ausgelöst werden, sodass der Fehler möglicherweise unbemerkt fehlschlägt.
Wie oben aufgeführt, hindert Sie der strikte Modus daran, bestimmte Dinge zu tun.
Die Leute denken im Allgemeinen, dass Sie diese Dinge überhaupt nicht verwenden sollten, aber einige Entwickler mögen die Einschränkung nicht und möchten alle Funktionen der Sprache verwenden.
Als grundlegendes Beispiel und als Referenz gehen Sie durch:
https://www.tutorialsteacher.com/javascript/javascript-strict
quelle
Der strikte Modus kann Speicherlecks verhindern.
Bitte überprüfen Sie die unten stehende Funktion im nicht strengen Modus:
In dieser Funktion verwenden wir eine Variable, die
name
innerhalb der Funktion aufgerufen wird. Intern prüft der Compiler zunächst, ob in diesem Funktionsbereich eine Variable mit diesem bestimmten Namen deklariert ist. Da der Compiler verstanden hat, dass es keine solche Variable gibt, prüft er den äußeren Bereich. In unserem Fall ist es der globale Geltungsbereich. Wieder hat der Compiler verstanden, dass im globalen Raum auch keine Variable mit diesem Namen deklariert ist, und erstellt daher eine solche Variable für uns im globalen Raum. Konzeptionell wird diese Variable im globalen Bereich erstellt und ist in der gesamten Anwendung verfügbar.Ein anderes Szenario ist, dass die Variable beispielsweise in einer untergeordneten Funktion deklariert wird. In diesem Fall überprüft der Compiler die Gültigkeit dieser Variablen im äußeren Bereich, dh der übergeordneten Funktion. Erst dann checkt es den globalen Raum ein und erstellt dort eine Variable für uns. Das bedeutet, dass zusätzliche Überprüfungen durchgeführt werden müssen. Dies wirkt sich auf die Leistung der Anwendung aus.
Schreiben wir nun die gleiche Funktion im strengen Modus.
Wir werden den folgenden Fehler erhalten.
Hier löst der Compiler den Referenzfehler aus. Im strengen Modus erlaubt uns der Compiler nicht, die Variable zu verwenden, ohne sie zu deklarieren. So können Speicherlecks verhindert werden. Darüber hinaus können wir optimierten Code schreiben.
quelle