suchen
HeimWeb-Frontendjs-TutorialVertiefende Kenntnisse des strengen Javascript-Modus (Strict Mode)_Javascript-Fähigkeiten

Der in ECMAScript5 eingeführte strikte Modus ermöglicht Entwicklern eine „bessere“ JavaScript-Sprache, indem er es der JavaScript-Laufzeitumgebung ermöglicht, einige der häufigsten und am schwersten zu findenden Fehler im Entwicklungsprozess anders als derzeit zu behandeln. Ich war lange Zeit skeptisch gegenüber dem Strict Mode, da ihn nur Firefox unterstützte. Aber heute unterstützen alle großen Browser in ihren neuesten Versionen den strikten Modus (einschließlich IE10, Opera12 und Android4, IOS5).

Welche Rolle spielt der strikte Modus?

Der strenge Modus führt viele Änderungen an JavaScript ein, und ich unterteile sie in zwei Kategorien (offensichtlich und subtil). Das Ziel kleinerer Verbesserungen besteht darin, einige detaillierte Probleme im aktuellen JavaScript zu beheben, auf die ich hier nicht näher eingehen werde. Wenn Sie interessiert sind, lesen Sie bitte das ausgezeichnete Dokument ECMA-262-5 im Detail, Kapitel 2, Strikter Modus von Dmitry Soshnikov . Ich werde mich hier auf die offensichtlichen Änderungen konzentrieren, die der strikte Modus mit sich bringt, auf die Konzepte, die Sie kennen sollten, bevor Sie den strikten Modus verwenden, und auf die Änderungen, die Ihnen am meisten helfen.

Bevor Sie mit dem Erlernen bestimmter Funktionen beginnen, denken Sie bitte daran, dass eines der Ziele des strikten Modus darin besteht, Ihnen ein schnelleres und bequemeres Debuggen zu ermöglichen. Für die Laufzeitumgebung ist es besser, explizit einen Fehler auszulösen, wenn sie ein Problem erkennt, als stillschweigend auszufallen oder sich seltsam zu verhalten (wie es häufig bei JavaScript-Laufzeiten der Fall ist, die den strikten Modus nicht aktivieren). Der strikte Modus wirft mehr Fehler aus, aber das ist gut so, denn diese Fehler erregen Ihre Aufmerksamkeit und beheben viele potenzielle Probleme, die zuvor schwer zu finden waren.

WIT-Schlüsselwort entfernen

Zuerst wird die with-Anweisung aus dem strikten Modus entfernt. Code, der die with-Anweisung enthält, löst eine Ausnahme im strikten Modus aus. Der erste Schritt zur Verwendung des strikten Modus: Stellen Sie sicher, dass Sie „with“ in Ihrem Code nicht verwenden.

Code kopieren Der Code lautet wie folgt:

// Der folgende JavaScript-Code löst im strikten Modus einen Fehler aus
mit (Standort) {
alarm(href);
}

Versehentliche Zuweisung globaler Variablen verhindern

Zweitens müssen lokale Variablen deklariert werden, bevor ein Wert zugewiesen wird. Bevor der strikte Modus aktiviert wird, wird durch das Kopieren einer nicht deklarierten lokalen Variablen automatisch eine globale Variable mit demselben Namen erstellt. Dies ist einer der häufigsten Fehler in JavaScript-Programmen und es wird eine explizite Ausnahme ausgelöst, wenn Sie versuchen, dies im strikten Modus zu tun.

Code kopieren Der Code lautet wie folgt:

// Eine Ausnahme wird im strikten Modus
ausgelöst (function() {
SomeUndeclaredVar = "foo";
}());

THIS in der Funktion zeigt standardmäßig nicht mehr auf das Globale

Eine weitere wichtige Änderung im strikten Modus besteht darin, dass diese in einer Funktion, die undefiniert oder leer (null oder undefiniert) ist, nicht mehr standardmäßig auf die globale Umgebung (global) verweist. Dies führt zu Fehlern bei der Ausführung einiger Codes, die auf dem Standardverhalten in Funktionen basieren, wie zum Beispiel:

Code kopieren Der Code lautet wie folgt:

window.color = "red";
Funktion sayColor() {
alarm(this.color);
}
// Im strikten Modus wird ein Fehler gemeldet. Wenn nicht im strikten Modus, wird „rot“
angezeigt. sayColor();
// Im strikten Modus wird ein Fehler gemeldet. Wenn nicht im strikten Modus, wird „rot“
angezeigt. sayColor.call(null);

Dies bleibt undefiniert, bis es zugewiesen wird. Dies bedeutet, dass bei der Ausführung eines Konstruktors eine Ausnahme ausgelöst wird, wenn zuvor kein klares neues Schlüsselwort vorhanden ist.

Code kopieren Der Code lautet wie folgt:

Funktion Person(name) {
This.name = name;
}
//Im strikten Modus
wird ein Fehler gemeldet var me = Person("Nicholas");

Wenn im obigen Code der Person-Konstruktor ausgeführt wird, bleibt dies in der Funktion undefiniert, da Sie keine Eigenschaften für undefiniert festlegen können, und der obige Code löst einen Fehler aus. In einer Umgebung mit nicht striktem Modus verweist dieser nicht kopierte Wert standardmäßig auf die globale Fenstervariable, und das Ergebnis des Vorgangs ist, dass versehentlich das Namensattribut für die globale Fenstervariable festgelegt wird.

Duplikate Namen verhindern

Wenn Sie viel Code schreiben, kann es leicht passieren, dass Objekteigenschaften und Funktionsparameter versehentlich auf einen doppelten Namen festgelegt werden. Der strikte Modus löst in diesem Fall explizit einen Fehler aus

Code kopieren Der Code lautet wie folgt:

//Doppelte Variablennamen melden einen Fehler im strikten Modus
Funktion doSomething(value1, value2, value1) {
//code
}
//Doppelte Objektattributnamen melden einen Fehler im strikten Modus:
var object = {
foo: „bar“,
foo: „baz“
};

Der obige Code wird im strikten Modus als Syntaxfehler betrachtet und Sie werden vor der Ausführung dazu aufgefordert.

Sicheres EVAL()

Obwohl die eval()-Anweisung letztendlich nicht entfernt wurde, wurden im strikten Modus dennoch einige Verbesserungen daran vorgenommen. Die größte Änderung besteht darin, dass in eval() ausgeführte Variablen- und Funktionsdeklarationen nicht direkt entsprechende Variablen oder Funktionen im aktuellen Bereich erstellen, zum Beispiel:

Code kopieren Der Code lautet wie folgt:

(function() {
eval("var x = 10;");
// Im nicht strengen Modus Alarm 10
// Im strikten Modus wird eine Ausnahme ausgelöst, weil x nicht definiert ist,
alarm(x);
}());

Alle Variablen oder Funktionen, die während der Ausführung von eval() erstellt wurden, bleiben in eval() erhalten. Aber Sie können das Ausführungsergebnis in eval() eindeutig aus dem Rückgabewert der eval()-Anweisung erhalten, zum Beispiel:

Code kopieren Der Code lautet wie folgt:

(function() {
var result = eval("var x = 10, y = 20; x y");
//Die restlichen Anweisungen können im strikten oder nicht strikten Modus korrekt ausgeführt werden (Ergebnis ist 30)
Warnung(Ergebnis);
}());

Ausnahme beim Ändern schreibgeschützter Eigenschaften

ECMAScript5 bietet außerdem die Möglichkeit, bestimmte Eigenschaften eines Objekts als schreibgeschützt festzulegen oder das gesamte Objekt nicht änderbar zu machen. Im nicht strikten Modus schlägt der Versuch, eine schreibgeschützte Eigenschaft zu ändern, jedoch stillschweigend fehl. Sie werden wahrscheinlich auf diese Situation stoßen, wenn Sie mit einigen browsernativen APIs arbeiten. Der strikte Modus löst in diesem Fall explizit eine Ausnahme aus, um Sie daran zu erinnern, dass das Ändern dieser Eigenschaft nicht zulässig ist.

Code kopieren Der Code lautet wie folgt:

var person = {};
Object.defineProperty(person, „name“ {
beschreibbar: falsch,
Wert: „Nikolaus“
});
// Im nicht-strikten Modus tritt ein stiller Fehler auf, im strikten Modus wird eine Ausnahme ausgelöst
person.name = "John";

Im obigen Beispiel ist das Namensattribut auf schreibgeschützt gesetzt. Das Ändern des Namensattributs im nicht strikten Modus führt nicht zu einem Fehler, die Änderung ist jedoch nicht erfolgreich. Der strikte Modus löst jedoch explizit eine Ausnahme aus.

HINWEIS: Es wird dringend empfohlen, den strikten Modus zu aktivieren, wenn Sie eine ECMAScript-Eigenschaftsattributspezifikation verwenden.

Wie benutzt man?

Es ist sehr einfach, den strikten Modus in modernen Browsern zu aktivieren. Geben Sie einfach den folgenden Befehl in den JavaScript-Code ein

"strikt verwenden";

Obwohl es den Anschein hat, dass es sich bei dem obigen Code nur um eine Zeichenfolge handelt, die keiner Variablen zugewiesen ist, weist er die JavaScript-Engine tatsächlich an, in den strikten Modus zu wechseln (Browser, die den strikten Modus nicht unterstützen, ignorieren den obigen Code und führen ihn nicht aus Auswirkungen auf die spätere Ausführung). Obwohl Sie diese Direktive global oder in einer bestimmten Funktion anwenden können, müssen Sie dennoch daran erinnert werden, den strikten Modus in der globalen Umgebung nicht zu aktivieren.

Code kopieren Der Code lautet wie folgt:

// Bitte verwenden Sie es nicht so
„strikt verwenden“;
Funktion doSomething() {
// Dieser Teil des Codes wird im strikten Modus ausgeführt
}
Funktion doSomethingElse() {
// Dieser Teil des Codes wird auch im strikten Modus ausgeführt
}


Obwohl der obige Code kein großes Problem zu sein scheint. Wenn Sie jedoch nicht für die Pflege des gesamten auf der Seite eingeführten Codes verantwortlich sind, werden Sie durch die Verwendung des strikten Modus auf diese Weise Problemen ausgesetzt, die durch Code von Drittanbietern verursacht werden, der nicht für den strikten Modus vorbereitet ist.

Daher ist es am besten, die Anweisung zum Aktivieren des strikten Modus in der Funktion anzuwenden, zum Beispiel:

Code kopieren Der Code lautet wie folgt:

Funktion doSomething() {
„strikt verwenden“;
//Der Code in dieser Funktion wird im strikten Modus ausgeführt
}
Funktion doSomethingElse() {
//Der Code in dieser Funktion wird nicht im strikten Modus ausgeführt
}


Wenn Sie möchten, dass der strikte Modus in mehr als einer Funktion aktiviert wird, verwenden Sie einen sofort aufgerufenen Funktionsausdruck (IIFE):

Code kopieren Der Code lautet wie folgt:

(function() {
„strikt verwenden“;
Funktion doSomething() {
               // Diese Funktion wird im strikten Modus ausgeführt
}
Funktion doSomethingElse() {
               // Diese Funktion läuft auch im strikten Modus
}
}());

Fazit

Ich empfehle dringend, dass Sie ab sofort den strikten JavaScript-Modus aktivieren, er kann Ihnen helfen, unbemerkte Fehler in Ihrem Code zu finden. Aktivieren Sie es nicht global, aber Sie können IIFE (sofortige Ausführung von Funktionsausdrücken) so weit wie möglich verwenden, um den strikten Modus auf mehrere Funktionsbereiche anzuwenden. Am Anfang werden Sie auf Fehlermeldungen stoßen, die Ihnen noch nie begegnet sind. Das ist normal. Wenn Sie den strikten Modus aktivieren, testen Sie ihn unbedingt in unterstützten Browsern, um neue potenzielle Probleme zu identifizieren. Fügen Sie Ihrem Code nicht einfach eine „use strict“-Zeile hinzu und gehen Sie davon aus, dass der Rest des Codes funktioniert. Beginnen Sie abschließend bitte damit, besseren Code im strikten Modus zu schreiben.

Hinweis:
Hier finden Sie eine Zusammenfassung der Unterstützung des strikten Modus in verschiedenen Browsern.
Auf dieser Seite können Sie die Strict-Mode-Unterstützung des aktuellen Browsers testen.

Vorteile des strikten Modus:

JavaScript stärker machen
1. Dies ist nicht mehr gekapselt. Im Normalmodus ist dies immer ein Objekt.
2. Fun.caller und fun.arguments sind keine Attribute, die gelöscht, noch festgelegt oder abgerufen werden können.
3. Arguments.caller ist ebenfalls ein Attribut, das weder gelöscht noch festgelegt oder abgerufen werden kann.

Bereitet den Weg für zukünftige ECMAScript-Versionen
1. Die folgenden reservierten Wörter wurden hinzugefügt: implementiert, Schnittstelle, let, Paket, private, geschützt, öffentlich, statisch und Ertrag.
2. Die Methodendeklaration sollte am Anfang des Skripts oder der Methode stehen und darf nicht in der Mitte von Anweisungen wie if oder for platziert werden.

Stellungnahme
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
JavaScript und das Web: Kernfunktionalität und AnwendungsfälleJavaScript und das Web: Kernfunktionalität und AnwendungsfälleApr 18, 2025 am 12:19 AM

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

Verständnis der JavaScript -Engine: ImplementierungsdetailsVerständnis der JavaScript -Engine: ImplementierungsdetailsApr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitPython vs. JavaScript: Die Lernkurve und BenutzerfreundlichkeitApr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Python gegen JavaScript: Community, Bibliotheken und RessourcenPython gegen JavaScript: Community, Bibliotheken und RessourcenApr 15, 2025 am 12:16 AM

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Von C/C nach JavaScript: Wie alles funktioniertVon C/C nach JavaScript: Wie alles funktioniertApr 14, 2025 am 12:05 AM

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

JavaScript -Engines: Implementierungen vergleichenJavaScript -Engines: Implementierungen vergleichenApr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor