Heim > Web-Frontend > js-Tutorial > Hauptteil

Detaillierte Einführung in den strikten Modus von Javascript_Javascript-Fähigkeiten

WBOY
Freigeben: 2016-05-16 16:46:02
Original
1435 Leute haben es durchsucht

„Strenger Modus“ ist eine neue Syntax, die durch ECMA-262 Edition 5 definiert wird, was bedeutet, dass für die Ausführung eine strikte Javascript-Syntax verwendet werden muss. Einige in der Vergangenheit häufig verwendete Schreibmethoden lösten SyntaxError-Ausnahmen aus, wie zum Beispiel:
1. Es gibt keine var-Deklaration vor der Variablen
2. Verwenden Sie oktale Syntax: var n = 023 und var s = "

1. Warum den „strengen Modus“ verwenden


Die Hauptzwecke der Einrichtung des „strengen Modus“ sind folgende:

1. Beseitigen Sie einige unzumutbare und ungenaue Aspekte der Javascript-Syntax.
Beseitigen Sie einige unsichere Aspekte der Codeausführung und sorgen Sie für eine höhere Effizienz des Compilers Laufgeschwindigkeit;
4. Den Weg für neue Versionen von Javascript ebnen.

„Strict Mode“ spiegelt die vernünftigere, sicherere und strengere Entwicklungsrichtung von Javascript wider. Mainstream-Browser, einschließlich IE 10, unterstützen ihn bereits, und viele große Projekte haben damit begonnen, ihn vollständig zu übernehmen.

Andererseits kann derselbe Code im „strikten Modus“ unterschiedliche Ausführungsergebnisse haben; einige Anweisungen, die im „normalen Modus“ ausgeführt werden können, werden im „strikten Modus“ nicht ausgeführt. Wenn Sie diese Inhalte beherrschen, können Sie Javascript besser verstehen und ein besserer Programmierer werden.
In diesem Artikel wird der „strenge Modus“ ausführlich vorgestellt.

2. Deklarieren Sie den „strengen Modus“


Das Deklarieren des „strengen Modus“ ist mit nur einer Anweisung sehr einfach:

Kopieren Sie den Code

Der Code lautet wie folgt: "use strict";

Hinweis: Ältere Versionen von Browsern behandeln es als eine Zeile gewöhnlicher Zeichenfolgen und ignorieren es.

1. Für die gesamte Skriptdatei

Fügen Sie „use strict“ in die erste Zeile der Skriptdatei ein, und das gesamte Skript wird im „strikten Modus“ ausgeführt. Wenn diese Anweisungszeile nicht die erste Zeile ist, ist sie ungültig und das gesamte Skript wird im „Normalmodus“ ausgeführt. Dies erfordert besondere Aufmerksamkeit, wenn Codedateien aus verschiedenen Modi in einer Datei zusammengeführt werden. (Genau genommen muss „use strict“ nicht in der ersten Zeile stehen, solange ihm keine Anweisung vorangestellt ist, die tatsächliche Operationsergebnisse liefert, z. B. direkt nach einem leeren Semikolon.)

Code kopieren

Der Code lautet wie folgt:


<script></p>"use strict"; <p>console.log("Dies ist der strikte Modus.");</p> <div class="codetitle"></script> <script><u>console.log("Dies ist der normale Modus.");</u></script>

Der obige Code zeigt an, dass eine Webseite zwei Teile Javascript-Code enthält. Das erstere Skript-Tag befindet sich im strikten Modus, das letztere jedoch nicht.


2. Für eine einzelne Funktion

Fügen Sie „use strict“ in die erste Zeile des Funktionskörpers ein, und die gesamte Funktion wird im „strict mode“ ausgeführt.


Code kopieren

Der Code lautet wie folgt:

function strict(){

" use strict“ ;
return „This is strict mode.“;

}function notStrict() {return „This is normal mode.“;}

3. Alternative Methode zum Schreiben von Skriptdateien

Da die erste Aufrufmethode der Dateizusammenführung nicht förderlich ist, besteht ein besserer Ansatz darin, die zweite Methode auszuleihen und das Ganze Die Skriptdatei wird in einer anonymen Funktion platziert, die sofort ausgeführt wird.
Code kopieren Der Code lautet wie folgt:

(function (){

"use strict";
// etwas Code hier

})();

4. Syntax- und Verhaltensänderungen im „strengen Modus“

Der „strenge Modus“ hat einige Änderungen an der Syntax und dem Verhalten von Javascript vorgenommen.

1. Explizite Deklaration globaler Variablen

Wenn wir im normalen Modus Variablen verwenden, müssen wir sie nicht zuerst mit var deklarieren (explizite Deklaration), aber im strengen Modus müssen Variablen mit var deklariert werden, bevor sie verwendet werden können, andernfalls ist ein Fehler aufgetreten .

Code kopieren Der Code lautet wie folgt:

"use strict";
v = 1; // Fehler gemeldet, v ist nicht deklariert
for(i = 0; i < 2; i ) { // Fehler gemeldet, i ist nicht deklariert
}

Daher Im strikten Modus müssen Variablen zuerst mit dem Befehl var deklariert und dann verwendet werden.

2. Statische Bindung

Eine Besonderheit der Javascript-Sprache besteht darin, dass sie eine „dynamische Bindung“ ermöglicht, d. h., zu welchem ​​Objekt bestimmte Eigenschaften und Methoden gehören, wird nicht zur Kompilierzeit, sondern zur Laufzeit bestimmt.

Der strenge Modus erlegt der dynamischen Bindung einige Einschränkungen auf. In einigen Fällen ist nur statische Bindung zulässig. Mit anderen Worten: Zu welchem ​​Objekt die Eigenschaften und Methoden gehören, wird während der Kompilierungsphase bestimmt. Dies trägt dazu bei, die Kompilierungseffizienz zu verbessern, den Code leichter lesbar zu machen und weniger Überraschungen zu verursachen.

Konkret geht es dabei um die folgenden Aspekte.

(1) Es ist verboten, die with-Anweisung

zu verwenden

Weil die with-Anweisung zur Kompilierungszeit nicht bestimmen kann, zu welchem ​​Objekt das Attribut gehört.

Code kopieren Der Code lautet wie folgt:

"use strict";
var v = 1 ;
with (o){ // Syntaxfehler
v = 2;
}

(2) Auswertungsbereich erstellen

Im normalen Modus verfügt die Javascript-Sprache über zwei Variablenbereiche: den globalen Bereich und den Funktionsbereich. Der strikte Modus erstellt einen dritten Bereich: den Auswertungsbereich.
Im normalen Modus hängt der Umfang der Auswertungsanweisung davon ab, ob sie sich im globalen Bereich oder im Funktionsbereich befindet. Im strikten Modus ist die eval-Anweisung selbst ein Bereich und kann keine globalen Variablen mehr generieren. Die von ihr generierten Variablen können nur innerhalb von eval verwendet werden.

Code kopieren Der Code lautet wie folgt:

"use strict";
var x = 2 ;
console.info(eval("var x = 5; x")); // 5
console.info(x); // 2

3. Erweiterte Sicherheitsmaßnahmen

(1) Verbieten Sie, dass dieses Schlüsselwort auf das globale Objekt verweist

Code kopieren Der Code ist wie folgt:

function f(){
return !this;
}
// Gibt false zurück, weil „this“ auf das globale Objekt „!this“ zeigt ist falsch
function f (){
"use strict";
return !this;
}

// Gibt true zurück, da im strikten Modus der Wert von this ist undefiniert, also ist „!this“ wahr.
Wenn Sie also bei Verwendung des Konstruktors vergessen, new hinzuzufügen, zeigt dies nicht mehr auf das globale Objekt, sondern es wird ein Fehler gemeldet.
Code kopieren Der Code lautet wie folgt:

Funktion f(){

"use strict";
this.a = 1;
};
f();// Fehler, das ist undefiniert


Bei einem normalen Funktionsaufruf f() zeigt der Wert von this auf das globale Objekt. Im strikten Modus zeigt der Wert von this auf undefiniert, wenn die Funktion über call and apply aufgerufen wird Parameter ist ein Für primitive Werte (Zeichenfolgen, Zahlen, boolesche Werte) außer null und undefiniert wird der Wert dieses zum Verpackungsobjekt, das diesem primitiven Wert entspricht. Wenn der Wert des Parameters thisvalue undefiniert oder null ist, wird der Wert von this zeigt auf das globale Objekt. Im strikten Modus ist der Wert von this der Wert des Parameters thisvalue ohne Typkonvertierung.

(2) Es ist verboten, den Aufrufstapel innerhalb der Funktion zu durchlaufen

Kopieren Sie den Code Der Code lautet wie folgt:

Funktion f1(){

"use strict";
f1.caller; // Fehlerberichterstattung
f1.arguments; // Fehlerberichterstattung
}
f1();

4. Das Löschen von Variablen ist verboten

Variablen können im strikten Modus nicht gelöscht werden. Es können nur Objekteigenschaften gelöscht werden, deren konfigurierbare Eigenschaft auf „true“ gesetzt ist.

Code kopieren Der Code lautet wie folgt:

"use strict";
var x;
delete x; // Syntaxfehler
var o = Object.create(null, 'x', {
value: 1,
configurable: true
});
delete o.x ; // Löschung erfolgreich

5. Explizite Fehlerberichterstattung

Im normalen Modus wird beim Zuweisen eines Werts zu einer schreibgeschützten Eigenschaft eines Objekts kein Fehler gemeldet, sondern es schlägt stillschweigend fehl. Im strikten Modus wird ein Fehler gemeldet.

Code kopieren Der Code lautet wie folgt:

"use strict";
var o = { };
Object.defineProperty(o, "v", { value: 1, writable: false });
o.v = 2; // Fehlerberichterstattung

Im strikten Modus, Verwenden Sie Getter für a. Wenn dem von der Methode gelesenen Attribut ein Wert zugewiesen wird, wird ein Fehler gemeldet.
Code kopieren Der Code lautet wie folgt:

"use strict";
var o = {
get v() { return 1; }
};
o.v = 2; // Fehlerbericht

Im strikten Modus werden neue Attribute zu Objekten hinzugefügt, die verboten sind Die Erweiterung meldet einen Fehler.
Code kopieren Der Code lautet wie folgt:

"use strict";
var o = { };
Object.preventExtensions(o);
o.v = 1; // Fehlerberichterstattung

Im strikten Modus wird beim Löschen eines Attributs, das nicht gelöscht werden kann, ein Fehler gemeldet.
Code kopieren Der Code lautet wie folgt:

"strikt verwenden";
löschen Object.prototype ; // Fehler melden

6. Doppelter Namensfehler

Der strikte Modus hat einige neue Syntaxfehler hinzugefügt.

(1) Objekte können keine Attribute mit doppelten Namen haben

Wenn ein Objekt im Normalmodus mehrere Attribute mit demselben Namen hat, überschreibt das zuletzt zugewiesene Attribut den vorherigen Wert. Im strikten Modus handelt es sich um einen Syntaxfehler.

Code kopieren Der Code lautet wie folgt:

"use strict";
var o = {
p: 1,
p: 2
} // Syntaxfehler

(2) Funktionen dürfen keine Parameter mit doppelten Namen haben

Wenn die Funktion im normalen Modus mehrere Parameter mit demselben Namen hat, können Sie diese mit arguments[i] lesen. Im strikten Modus handelt es sich um einen Syntaxfehler.

Code kopieren Der Code lautet wie folgt:

"use strict";
Funktion f(a , a, b) { // Syntaxfehler
return ;
}

7. Oktalschreibweise ist verboten

Wenn im Normalmodus die erste Ziffer einer Ganzzahl 0 ist, bedeutet dies, dass es sich um eine Oktalzahl handelt. Beispielsweise entspricht 0100 der Dezimalzahl 64. Der strikte Modus verbietet diese Darstellung, das erste Bit der Ganzzahl ist 0 und es wird ein Fehler gemeldet.

Code kopieren Der Code lautet wie folgt:

"use strict";
var n = 0100 ; // Syntaxfehler
8. Einschränkungen des Argumentobjekts

arguments ist das Parameterobjekt der Funktion und der strikte Modus schränkt seine Verwendung ein.

(1) Zuweisung zu Argumenten ist nicht erlaubt

Code kopieren Der Code ist wie folgt:

"use strict";
arguments ; // Syntaxfehler
var obj = { set p(arguments) { } }; // Syntaxfehler
try { } Catch ( Argumente) { } // Syntaxfehler
function arguments() { } // Syntaxfehler
var f = new Function("arguments", "'use strict'; return 17;"); // Syntaxfehler

(2) Argumente verfolgen keine Parameteränderungen mehr

Code kopieren Der Code lautet wie folgt:

function f(a) {
a = 2;
return [a, arguments[0]];
}
f(1); // Normal Modus ist [2,2]
Funktion f(a) {
"use strict";
a = 2;
return [a, arguments[0]];
}
f (1); // Strikter Modus ist [2,1]

(3) Die Verwendung von arguments.callee ist verboten

Das bedeutet, dass Sie sich selbst nicht innerhalb einer anonymen Funktion aufrufen können.

Code kopieren Der Code lautet wie folgt:

"use strict";
var f = function () { return arguments.callee };
f(); // Fehler melden

9. Funktionen müssen auf der obersten Ebene deklariert werden

Neue Versionen von Javascript werden in Zukunft einen „Block-Level-Bereich“ einführen. Um mit der neuen Version Schritt zu halten, erlaubt der strikte Modus nur die Deklaration von Funktionen im globalen Bereich oder auf der obersten Ebene des Funktionsbereichs. Das heißt, es ist nicht erlaubt, Funktionen innerhalb eines Nicht-Funktionscodeblocks zu deklarieren.

Code kopieren Der Code lautet wie folgt:

"use strict";
if (true) {
function f() { } // Syntaxfehler
}
for (var i = 0; i < 5; i ) {
function f2() { } // Syntaxfehler
}


10. Reservierte Wörter

Um in Zukunft auf neue Versionen von Javascript umzusteigen, fügt der strikte Modus einige neue reservierte Wörter hinzu: implementiert, Schnittstelle, let, Paket, privat, geschützt, öffentlich, statisch, Ertrag.
Die Verwendung dieser Wörter als Variablennamen führt zu einem Fehler.

Code kopieren Der Code lautet wie folgt:

Funktionspaket (geschützt) { // Syntax error
"use strict";
var implementiert; // Syntaxfehler
}

Darüber hinaus legt die fünfte Version von ECMAscript selbst auch andere reservierte Wörter fest (class, enum, export, extensions, import , super) sowie die von gängigen Browsern hinzugefügten const-reservierten Wörter können nicht als Variablennamen verwendet werden.
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage