Frage Was macht "Use Strict" in JavaScript und was ist der Grund dafür?


Kürzlich habe ich einen Teil meines JavaScript-Codes durch Crockfords laufen lassen JSLintund es gab den folgenden Fehler:

Problem bei Zeile 1 Zeichen 1: Fehlende Anweisung "use strict".

Beim Suchen habe ich festgestellt, dass einige Leute hinzufügen "use strict"; in ihren JavaScript-Code. Sobald ich die Anweisung hinzugefügt habe, wurde der Fehler nicht mehr angezeigt. Leider hat Google nicht viel von der Geschichte hinter dieser Zeichenfolgenaussage verraten. Sicher muss es etwas damit zu tun haben, wie das JavaScript vom Browser interpretiert wird, aber ich habe keine Ahnung, was der Effekt wäre.

Also was ist "use strict"; worum geht es, und ist es noch relevant?

Reagiert einer der aktuellen Browser auf die "use strict"; String oder ist es für zukünftige Verwendung?


6702
2017-08-26 16:10


Ursprung


Antworten:


Dieser Artikel über Javascript Strict Mode könnte Sie interessieren: John Resig - ECMAScript 5 Strict Mode, JSON und mehr

Um einige interessante Teile zu zitieren:

Strict Mode ist eine neue Funktion in ECMAScript 5, mit der Sie ein Programm oder eine Funktion in einem "strikten" Betriebskontext platzieren können. Dieser strenge Kontext verhindert, dass bestimmte Aktionen ausgeführt werden, und löst weitere Ausnahmen aus.

Und:

Strict-Modus hilft auf mehrere Arten:

  • Es fängt einige häufige Codierungsfehler auf und wirft Ausnahmen.
  • Es verhindert oder löst Fehler aus, wenn relativ "unsichere" Aktionen ausgeführt werden (z. B. Zugriff auf das globale Objekt erhalten).
  • Es deaktiviert Funktionen, die verwirrend oder schlecht durchdacht sind.

Beachten Sie auch, dass Sie "strict mode" auf die gesamte Datei anwenden können ... Oder Sie können es nur für eine bestimmte Funktion verwenden (zitiert immer noch aus John Resigs Artikel):

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code... 

Was hilfreich sein kann, wenn Sie alten und neuen Code mischen müssen ;-)

Also, ich nehme an, es ist ein bisschen wie das "use strict" Sie können in Perl verwenden (daher der Name?): Es hilft Ihnen, weniger Fehler zu machen, indem Sie mehr Dinge entdecken, die zu Brüchen führen könnten.

Derzeit ist es unterstützt von allen gängigen Browsern  (Bar IE 9 und darunter).


4392
2017-08-26 16:15



Es ist ein neues Feature von ECMAScript 5. John Resig schrieb auf eine schöne Zusammenfassung davon.

Es ist nur eine Zeichenfolge, die Sie in Ihre JavaScript-Dateien einfügen (entweder oben in der Datei oder innerhalb einer Funktion), die wie folgt aussieht:

"use strict";

Wenn Sie es jetzt in Ihren Code einfügen, sollte dies keine Probleme mit den aktuellen Browsern verursachen, da es sich nur um eine Zeichenfolge handelt. Es kann in Zukunft zu Problemen mit Ihrem Code führen, wenn Ihr Code gegen das Pragma verstößt. Zum Beispiel, wenn Sie gerade haben foo = "bar" ohne zu definieren foo Zuerst wird der Code versagen ... was meiner Meinung nach eine gute Sache ist.


1101
2017-08-26 16:14



Die Aussage "use strict"; weist den Browser an, den Strict-Modus zu verwenden, der eine reduzierte und sicherere Funktion von JavaScript darstellt.

Liste der Merkmale (nicht erschöpfend)

  1. Disallows globale Variablen. (Fängt ab var Deklarationen und Tippfehler in Variablennamen)

  2. Silent failing Zuweisungen werden Fehler im strikten Modus (Zuweisung NaN = 5;)

  3. Versuche, nicht löschbare Eigenschaften zu löschen, werfendelete Object.prototype)

  4. Erfordert, dass alle Eigenschaftsnamen in einem Objektliteral eindeutig sind (var x = {x1: "1", x1: "2"})

  5. Die Namen der Funktionsparameter müssen eindeutig sein (function sum (x, x) {...})

  6. Verbietet oktale Syntax (var x = 023; einige Entwickler nehmen falsch an, dass eine vorangehende Null die Zahl nicht ändert.)

  7. Verbietet die with Stichwort

  8. eval Im strikten Modus werden keine neuen Variablen eingeführt

  9. Forbids Löschen von einfachen Namen (delete x;)

  10. Verbietet Bindung oder Zuweisung der Namen eval und arguments in irgendeiner Form

  11. Der strikte Modus alias Eigenschaften des arguments Objekt mit den formalen Parametern. (d. h. in function sum (a,b) { return arguments[0] + b;} Das funktioniert weil arguments[0] ist gebunden an a und so weiter. )

  12. arguments.callee wird nicht unterstützt

[Ref: Strikter Modus, Mozilla-Entwickler-Netzwerk]


518
2017-11-24 21:22



Wenn Menschen sich Sorgen machen über die Verwendung use strict Es könnte sich lohnen, diesen Artikel zu lesen:

ECMAScript 5 'Strict Mode' Unterstützung in Browsern. Was bedeutet das?
NovoGeek.com - Krishnas Weblog

Es geht um Browser-Unterstützung, aber vor allem, wie man damit sicher umgehen kann:

function isStrictMode(){
    return !this;
} 
/*
   returns false, since 'this' refers to global object and 
   '!this' becomes false
*/

function isStrictMode(){   
    "use strict";
    return !this;
} 
/* 
   returns true, since in strict mode the keyword 'this'
   does not refer to global object, unlike traditional JS. 
   So here, 'this' is 'undefined' and '!this' becomes true.
*/

368
2017-07-15 23:25



Ein Wort der Vorsicht, alles, was Sie hart-Lade-Programmierer: Anwendung "use strict" zu bestehendem code kann gefährlich sein! Dieses Ding ist nicht irgendein Wohlfühl-, glückliches-Gesicht Aufkleber, den Sie auf den Code schlagen können, um es "besser" zu machen. Mit dem "use strict" pragma, wird der Browser plötzlich Ausnahmen an zufälligen Stellen, die er nie zuvor geworfen hat, nur weil an dieser Stelle Sie etwas tun, das Standard / loses JavaScript gerne erlaubt, aber strenge JavaScript verabscheut! Sie können Striktheitsverletzungen in selten verwendeten Aufrufen in Ihrem Code verbergen, die 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 wagen, ist es eine gute Idee, sich zu bewerben "use strict" Neben umfassenden Komponententests und einer streng konfigurierten JSHint-Build-Aufgabe, die dir die Gewissheit geben wird, dass es keine dunkle Ecke deines Moduls gibt, die fürchterlich explodiert, nur weil du den Strengen Modus aktiviert hast. Oder, hey, hier ist eine andere Option: füge einfach nicht hinzu "use strict" zu irgendeinem Ihrer Legacy-Codes ist es wahrscheinlich sicherer, ehrlich gesagt. Definitiv nicht hinzufügen "use strict" zu Modulen, die Sie nicht besitzen oder warten, wie Module von Drittanbietern.

Ich denke, obwohl es ein tödlich eingesperrtes Tier ist, "use strict" kann gut sein, aber du musst es richtig machen. Die beste Zeit, um streng zu sein, ist, wenn Ihr Projekt auf der grünen Wiese ist und Sie von vorne anfangen. Konfigurieren JSHint/JSLint Mit all den Warnungen und Optionen, die so hoch sind, wie es deinem Team möglich ist, bekommst du ein gutes Build / Test / Assertion-System, das dir gefällt Grunt+Karma+Chaiund erst dann markieren Sie alle Ihre neuen Module als "use strict". Seien Sie darauf vorbereitet, viele kleine Fehler und Warnungen zu beheben. Stellen Sie sicher, dass jeder die Schwerkraft versteht, indem Sie den Build auf FAIL konfigurieren JSHint/JSLintproduziert Verstöße.

Mein Projekt war kein Greenfield-Projekt, als ich adoptierte "use strict". Infolgedessen ist meine IDE voll von roten Markierungen, weil ich nicht habe "use strict" auf der Hälfte meiner Module, und JSHint beklagt sich darüber. Es erinnert mich daran, was ich in Zukunft tun sollte. Mein Ziel ist es, aufgrund der fehlenden Punkte rot markiert zu sein "use strict" Aussagen, aber das sind jetzt Jahre weg.


182
2018-03-03 07:37



Verwenden 'use strict'; macht deinen Code nicht plötzlich besser.

Das JavaScript-strikter Modus ist ein Feature in ECMAScript 5. Sie können den strikten Modus aktivieren, indem Sie dies oben im Skript / in der Funktion deklarieren.

'use strict';

Wenn eine JavaScript-Engine dies sieht Richtlinie, wird es beginnen, den Code in einem speziellen Modus zu interpretieren. In diesem Modus werden Fehler ausgelöst, wenn bestimmte Programmierpraktiken entdeckt werden, die potentielle Fehler sein könnten (was der Grund für den strikten Modus ist).

Betrachten Sie dieses Beispiel:

var a = 365;
var b = 030;

In ihrer Obsession, die numerischen Literale aufzustellen, hat der Entwickler versehentlich eine Variable initialisiert b mit einem oktalen Literal. Der nicht strikte Modus interpretiert dies als numerisches Literal mit Wert 24 (in Basis 10). Der strikte Modus wird jedoch einen Fehler auslösen.

Für eine nicht erschöpfende Liste von Spezialitäten im strikten Modus, siehe diese Antwort.


Wo soll ich verwenden? 'use strict';?

  • In meinem Neu JavaScript-Anwendung: Absolut! Der Strict-Modus kann als Whistleblower verwendet werden, wenn Sie etwas Dummes mit Ihrem Code machen.

  • In meinem bestehende JavaScript-Code: Wahrscheinlich nicht! Wenn Ihr vorhandener JavaScript-Code Anweisungen enthält, die im Strict-Modus nicht zulässig sind, wird die Anwendung einfach unterbrochen. Wenn Sie den strikten Modus verwenden möchten, sollten Sie bereit sein, Ihren vorhandenen Code zu debuggen und zu korrigieren. Deshalb verwenden 'use strict'; macht deinen Code nicht plötzlich besser.


Wie verwende ich den strikten Modus?

  1. Fügen Sie ein ein 'use strict'; Aussage oben auf Ihrem Skript:

    // File: myscript.js
    
    'use strict';
    var a = 2;
    ....
    

    Beachte das alles in der Datei myscript.js wird im strikten Modus interpretiert.

  2. Oder fügen Sie ein ein 'use strict'; Aussage oben auf Ihrem Funktionskörper:

    function doSomething() {
        'use strict';
        ...
    }
    

    Alles in der lexikalischer Umfang der Funktion doSomething wird im strikten Modus interpretiert. Das Wort lexikalischer Umfang ist hier wichtig. Sehen diese Antwort für eine bessere Erklärung.


Was ist im strikten Modus verboten?

Ich habe einen ... gefunden schöner Artikel Beschreibung mehrerer Dinge, die im strikten Modus verboten sind (beachten Sie, dass dies keine exklusive Liste ist):

Umfang

Historisch gesehen war JavaScript verwirrt darüber, wie Funktionen   sind begrenzt. Manchmal scheinen sie statisch begrenzt zu sein, andere jedoch   Features sorgen dafür, dass sie sich wie dynamische Bereiche verhalten. Das ist   verwirrend, wodurch Programme schwer zu lesen und zu verstehen sind.   Missverständnis verursacht Fehler. Es ist auch ein Problem für die Leistung.   Statisches Scoping würde ermöglichen, dass eine variable Bindung beim Kompilieren auftritt   Zeit, aber die Voraussetzung für dynamischen Umfang bedeutet, dass die Bindung sein muss   auf die Laufzeit verzögert, was mit einer erheblichen Performance einhergeht   Elfmeter.

Der strikte Modus erfordert, dass alle Variablenbindungen statisch ausgeführt werden.   Das bedeutet, dass die Features, die zuvor eine dynamische Bindung erforderten   muss beseitigt oder geändert werden. Insbesondere ist die with-Anweisung   eliminiert, und die Fähigkeit der eval-Funktion, die manipulieren   Umgebung seines Anrufers ist stark eingeschränkt.

Einer der Vorteile von striktem Code ist, dass Tools wie YUI-Kompressor   kann bei der Verarbeitung einen besseren Job machen.

Implizierte globale Variablen

JavaScript hat globale Variablen impliziert. Ob   Sie deklarieren nicht explizit eine Variable, sondern eine globale Variable   implizit für Sie erklärt. Dies erleichtert die Programmierung   Anfänger, weil sie einige ihrer grundlegenden Haushaltsführung vernachlässigen können   Hausarbeiten. Aber es macht die Verwaltung von größeren Programmen viel mehr   schwierig und es verschlechtert die Zuverlässigkeit erheblich. Also streng   Modus, implizite globale Variablen werden nicht mehr erstellt. Du solltest   Deklarieren Sie explizit alle Ihre Variablen.

Globale Leckage

Es gibt eine Reihe von Situationen, die dazu führen können this   an das globale Objekt gebunden sein. Zum Beispiel, wenn du es vergisst   das ____ bereitstellen new Präfix beim Aufruf einer Konstruktorfunktion, der   Konstruktor this wird so unerwartet an das globale Objekt gebunden   Anstatt ein neues Objekt zu initialisieren, wird es stattdessen still gehalten   Manipulation globaler Variablen. In diesen Situationen wird der strikte Modus   stattdessen binden this zu undefined, was den Konstruktor veranlassen wird   Stattdessen wird eine Ausnahme ausgelöst, wodurch der Fehler viel erkannt wird   früher.

Lautes Versagen

JavaScript hatte immer nur Leseeigenschaften, aber Sie   Ich konnte sie nicht selbst bis ES5 erstellen Object.createProperty   Funktion stellte diese Fähigkeit zur Verfügung. Wenn Sie versucht haben, einen Wert zuzuweisen   Bei einer Read-Only-Eigenschaft würde es automatisch fehlschlagen. Die Aufgabe würde   Ändern Sie nicht den Wert der Eigenschaft, aber Ihr Programm würde wie folgt fortfahren   obwohl es hatte. Dies ist eine Integritätsgefahr, die Programme verursachen kann   in einen inkonsistenten Zustand geraten. Im strikten Modus versuchen Sie, a zu ändern   schreibgeschützte Eigenschaft löst eine Ausnahme aus.

Oktal

Die oktale (oder Basis 8) Darstellung der Zahlen war extrem   nützlich bei der Maschinenprogrammierung auf Maschinen, deren Wort   Die Größen waren ein Vielfaches von 3. Sie brauchten Octal, wenn Sie mit dem CDC arbeiten   6600 Mainframe, der eine Wortgröße von 60 Bits hatte. Wenn du lesen könntest   Oktal könnte man ein Wort als 20 Ziffern betrachten. Zwei Ziffern dargestellt   der Op-Code, und eine Ziffer identifiziert eines von 8 Registern. Während der   langsamer Übergang von Maschinencodes zu Hochsprachen, war es   gedacht, um nützlich zu sein, um oktale Formen in Programmiersprachen zur Verfügung zu stellen.

In C war eine äußerst unglückliche Darstellung der Oktalität   ausgewählt: Führende Null. Also in C, 0100 bedeutet 64, nicht 100, und 08 ist ein   Irrtum, nicht 8. Noch mehr leider ist dieser Anachronismus gewesen   kopiert in fast alle modernen Sprachen, einschließlich JavaScript, wo   Es wird nur zum Erstellen von Fehlern verwendet. Es hat keinen anderen Zweck. Also rein   strict mode, oktale Formen sind nicht mehr erlaubt.

Und so weiter

Das Argument-Pseudo-Array wird ein bisschen mehr   Array-ähnlich in ES5. Im strikten Modus verliert es seine callee und caller   Eigenschaften. Dies macht es möglich, Ihre zu übergeben arguments nicht vertrauenswürdig   ohne viel vertraulichen Kontext aufzugeben. Auch der    arguments Eigenschaft von Funktionen wird eliminiert.

Im strikten Modus erzeugen doppelte Schlüssel in einem Funktionsliteral a   Syntax-Fehler. Eine Funktion kann nicht zwei Parameter mit demselben Namen haben.   Eine Funktion darf keine Variable mit dem gleichen Namen wie eine davon haben   Parameter. Eine Funktion kann nicht delete seine eigenen Variablen. Ein Versuch zu    delete Eine nicht konfigurierbare Eigenschaft löst jetzt eine Ausnahme aus. Primitive   Werte werden nicht implizit umschlossen.


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, wird im strikten Modus ein Fehler ausgegeben. Die reservierten Wörter sind:

implements, interface, let, package, private, protected, public, static, und yield


Weiterführende Literatur


131
2018-01-29 11:35



Ich empfehle allen Entwicklern dringend, jetzt den strikten Modus zu verwenden. Es gibt genügend Browser, die es unterstützen, dass der strikte Modus uns hilft, uns vor Fehlern zu schützen, von denen wir nicht einmal wussten, dass sie sich in Ihrem Code befinden.

Offensichtlich wird es im Anfangsstadium Fehler geben, die wir noch nie zuvor erlebt haben. Um den vollen Nutzen zu erzielen, müssen wir nach dem Wechsel in den strikten Modus korrekte Tests durchführen, um sicherzustellen, dass wir alles erfasst haben. Definitiv werfen wir nicht einfach use strict in unserem Code und davon ausgehen, dass es keine Fehler gibt. Daher ist es an der Zeit, diese unglaublich nützliche Sprachfunktion zu verwenden, um besseren Code zu schreiben.

Beispielsweise,

var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};

JSLint ist ein Debugger von Douglas Crockford geschrieben. Fügen Sie Ihr Skript einfach ein und es wird schnell nach erkennbaren Problemen und Fehlern in Ihrem Code suchen.


122
2017-07-05 19:38



Ich möchte eine etwas fundiertere Antwort anbieten, die die anderen Antworten ergänzt. Ich hatte gehofft, die beliebteste Antwort zu bearbeiten, scheiterte aber. Ich habe versucht, es so umfassend und vollständig wie möglich zu gestalten.

Sie können auf die verweisen MDN-Dokumentation für mehr Informationen.

"use strict" eine Richtlinie, die in ECMAScript 5 eingeführt wurde.

Richtlinien sind Aussagen ähnlich, jedoch anders.

  • use strict enthält keine Schlüsselwörter: Die Direktive ist eine einfache Ausdruckanweisung, die aus einem speziellen String-Literal (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 von ECMAScript-Standards einführen use als ein echtes Schlüsselwort; die Zitate würden dadurch obsolet werden.
  • use strict kann nur am Anfang eines Skripts oder einer Funktion verwendet werden, d. h. es muss jeder anderen (echten) Anweisung vorangehen. 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-Literale-Anweisungen, die einer ersten reellen Anweisung (in einem Skript oder einer Funktion) folgen, sind einfache Ausdruckanweisungen. Interpreten dürfen sie nicht als Direktiven interpretieren und haben keine Wirkung.

Das use strictDirektive gibt an, dass der folgende Code (in einem Skript oder einer Funktion) ein strenger Code ist. Der Code auf der höchsten Ebene eines Skripts (Code, der nicht in einer Funktion enthalten ist) wird als strikter Code betrachtet, wenn das Skript a enthält use strict Richtlinie. Der Inhalt einer Funktion wird als strenger Code betrachtet, wenn die Funktion selbst in einem strikten Code definiert ist oder wenn die Funktion a enthält use strict Richtlinie. Code, der an einen übergeben wird eval() Methode gilt als strenger Code wann eval() wurde von einem strikten Code aufgerufen oder enthält die use strict Richtlinie selbst.

Der strikte Modus von ECMAScript 5 ist eine eingeschränkte Teilmenge der JavaScript-Sprache, die relevante Sprachdefizite eliminiert und eine strengere Fehlerprüfung und höhere Sicherheit bietet. Im Folgenden werden die Unterschiede zwischen dem strikten Modus und dem normalen Modus aufgeführt (von denen die ersten drei besonders wichtig sind):

  • Du kannst das nicht benutzen with-Anweisung im strikten Modus.
  • Im strikten Modus müssen alle Variablen deklariert werden: wenn Sie einem Bezeichner einen Wert zuweisen, der nicht als Variable, Funktion, Funktionsparameter, Parameter catch-clause oder Eigenschaft des globalen Bezeichners deklariert wurde ObjectDann bekommst du ein ReferenceError. Im normalen Modus wird der Bezeichner implizit als globale Variable deklariert (als eine Eigenschaft des globalen Object)
  • Im strikten Modus das Schlüsselwort this hat den Wert undefined in Funktionen, die als Funktionen aufgerufen wurden (nicht als Methoden). (Im normalen Modus this zeigt immer auf das Globale Object). Dieser Unterschied kann verwendet werden, um zu testen, ob eine Implementierung den strikten Modus unterstützt:
var hasStrictMode = (function() { "use strict"; return this===undefined }());
  • Auch wenn eine Funktion aufgerufen wird mit call() oder apply im strengen Modus dann this ist genau der Wert des ersten Arguments der call()oder apply() Aufruf. (Im normalen Modus null und undefined werden durch das Globale ersetzt Object und Werte, die keine Objekte sind, werden in Objekte umgewandelt.)

  • Im strikten Modus erhalten Sie eine TypeError, wenn Sie versuchen, schreibgeschützten Eigenschaften zuzuweisen oder neue Eigenschaften für ein nicht erweiterbares Objekt zu definieren. (Im normalen Modus scheitern beide einfach ohne Fehlermeldung.)

  • Im strikten Modus, wenn Code an übergeben wird eval(), Sie können keine Variablen oder Funktionen im Bereich des Aufrufers deklarieren oder definieren (wie Sie es im normalen Modus tun können). Stattdessen wird ein neuer Bereich für erstellt eval() und die Variablen und Funktionen sind in diesem Bereich. Dieser Bereich wird danach zerstört eval() beendet die Ausführung.
  • Im strikten Modus enthält das arguments-Objekt einer Funktion eine statische Kopie der Werte, die an diese Funktion übergeben werden. Im normalen Modus hat das arguments-Objekt ein etwas "magisches" Verhalten: Die Elemente des Arrays und die benannten Funktionsparameter verweisen auf den gleichen Wert.
  • Im strikten Modus erhalten Sie eine SyntaxError wenn das delete Auf den Operator folgt ein nicht qualifizierter Bezeichner (ein Variablen-, Funktions- oder Funktionsparameter). Im normalen Modus ist der delete Ausdruck würde nichts tun und wird ausgewertet false.
  • Im strikten Modus erhalten Sie eine TypeError wenn Sie versuchen, eine nicht konfigurierbare Eigenschaft zu löschen. (Im normalen Modus versagt der Versuch einfach und der deleteAusdruck wird ausgewertet zu false).
  • Im strikten Modus wird es als ein syntaktischer Fehler angesehen, wenn Sie versuchen, mehrere Eigenschaften mit demselben Namen für ein Objektliteral zu definieren. (Im normalen Modus gibt es keinen Fehler.)
  • Im strikten Modus gilt es als syntaktischer Fehler, wenn eine Funktionsdeklaration mehrere Parameter mit demselben Namen hat. (Im normalen Modus gibt es keinen Fehler.)
  • Im strikten Modus sind oktale Literale nicht erlaubt (dies sind Literale, die mit beginnen 0x. (Im normalen Modus erlauben einige Implementierungen oktale Literale.)
  • Im strikten Modus die Kennungen eval und arguments werden wie Keywords behandelt. Sie können ihren Wert nicht ändern, ihnen keinen Wert zuweisen, und Sie können sie nicht als Namen für Variablen, Funktionen, Funktionsparameter oder Bezeichner eines catch-Blocks verwenden.
  • Im strikten Modus gibt es mehr Einschränkungen hinsichtlich der Möglichkeiten, den Call-Stack zu untersuchen. arguments.caller und arguments.callee wegen einem TypeError in einer Funktion im strikten Modus. Darüber hinaus verursachen einige Aufrufer- und Argumenteigenschaften von Funktionen im strikten Modus a TypeError wenn Sie versuchen, sie zu lesen.

81
2018-05-15 06:58



Meine zwei Cent:

Eines der Ziele des strikten Modus besteht darin, Probleme schneller zu beheben. Es hilft den Entwicklern, eine Ausnahme auszulösen, wenn bestimmte falsche Dinge auftreten, die ein stilles und merkwürdiges Verhalten Ihrer Webseite verursachen können. Der Moment, den wir benutzen use strict, wird der Code Fehler auswerfen, die dem Entwickler helfen, es im Voraus zu beheben.

Wenige wichtige Dinge, die ich nach dem Gebrauch gelernt habe use strict :

Verhindert globale Variablendeklaration:

var tree1Data = { name: 'Banana Tree',age: 100,leafCount: 100000};

function Tree(typeOfTree) {
    var age;
    var leafCount;

    age = typeOfTree.age;
    leafCount = typeOfTree.leafCount;
    nameoftree = typeOfTree.name;
};

var tree1 = new Tree(tree1Data);
console.log(window);

Jetzt erstellt dieser Code nameoftree im globalen Umfang, auf den mit zugegriffen werden könnte window.nameoftree. Wenn wir es umsetzen use strict Der Code würde einen Fehler auslösen.

Uncaught ReferenceError: nameofree ist nicht definiert

Probe

Beseitigt with Erklärung :

with Anweisungen können nicht mit Tools wie minimiert werden hässlich-js. Sie sind auch veraltet und aus zukünftigen JavaScript-Versionen entfernt.

Probe

Verhindert Duplikate:

Wenn eine doppelte Eigenschaft vorhanden ist, wird eine Ausnahme ausgelöst

Uncaught SyntaxError: Doppelte Dateneigenschaft im Objektliteral nicht   im strikten Modus erlaubt

"use strict";
var tree1Data = {
    name: 'Banana Tree',
    age: 100,
    leafCount: 100000,
    name:'Banana Tree'
};

Es gibt wenige mehr, aber ich muss mehr Wissen darüber gewinnen.


73
2018-03-10 03:31



Wenn Sie einen Browser verwenden, der im letzten Jahr veröffentlicht wurde, wird wahrscheinlich der JavaScript Strict-Modus unterstützt. 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 strikten Modus einen Syntaxfehler erzeugen, in der Regel nur dazu führen, dass das Skript in diesen älteren Browsern schwer zu erkennen ist).


54
2018-03-27 12:18