Heim Web-Frontend js-Tutorial Vertiefende Kenntnisse des strengen Javascript-Modus (Strict Mode)_Javascript-Fähigkeiten

Vertiefende Kenntnisse des strengen Javascript-Modus (Strict Mode)_Javascript-Fähigkeiten

May 16, 2016 pm 04:29 PM
javascript strenger Modus

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.

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

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)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript Dec 17, 2023 pm 02:54 PM

So implementieren Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem. Einführung: Mit der kontinuierlichen Weiterentwicklung der Technologie ist die Spracherkennungstechnologie zu einem wichtigen Bestandteil des Bereichs der künstlichen Intelligenz geworden. Das auf WebSocket und JavaScript basierende Online-Spracherkennungssystem zeichnet sich durch geringe Latenz, Echtzeit und plattformübergreifende Eigenschaften aus und hat sich zu einer weit verbreiteten Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Spracherkennungssystem implementieren.

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Realisierung von Echtzeit-Überwachungssystemen Einführung: Mit der rasanten Entwicklung der Internet-Technologie wurden Echtzeit-Überwachungssysteme in verschiedenen Bereichen weit verbreitet eingesetzt. Eine der Schlüsseltechnologien zur Erzielung einer Echtzeitüberwachung ist die Kombination von WebSocket und JavaScript. In diesem Artikel wird die Anwendung von WebSocket und JavaScript in Echtzeitüberwachungssystemen vorgestellt, Codebeispiele gegeben und deren Implementierungsprinzipien ausführlich erläutert. 1. WebSocket-Technologie

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript Dec 17, 2023 am 09:39 AM

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript. Im heutigen digitalen Zeitalter müssen immer mehr Unternehmen und Dienste Online-Reservierungsfunktionen bereitstellen. Es ist von entscheidender Bedeutung, ein effizientes Online-Reservierungssystem in Echtzeit zu implementieren. In diesem Artikel wird erläutert, wie Sie mit WebSocket und JavaScript ein Online-Reservierungssystem implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist WebSocket? WebSocket ist eine Vollduplex-Methode für eine einzelne TCP-Verbindung.

Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Dec 17, 2023 pm 12:09 PM

Einführung in die Verwendung von JavaScript und WebSocket zur Implementierung eines Online-Bestellsystems in Echtzeit: Mit der Popularität des Internets und dem Fortschritt der Technologie haben immer mehr Restaurants damit begonnen, Online-Bestelldienste anzubieten. Um ein Echtzeit-Online-Bestellsystem zu implementieren, können wir JavaScript und WebSocket-Technologie verwenden. WebSocket ist ein Vollduplex-Kommunikationsprotokoll, das auf dem TCP-Protokoll basiert und eine bidirektionale Kommunikation zwischen Client und Server in Echtzeit realisieren kann. Im Echtzeit-Online-Bestellsystem, wenn der Benutzer Gerichte auswählt und eine Bestellung aufgibt

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Einführung: Heutzutage ist die Genauigkeit von Wettervorhersagen für das tägliche Leben und die Entscheidungsfindung von großer Bedeutung. Mit der Weiterentwicklung der Technologie können wir genauere und zuverlässigere Wettervorhersagen liefern, indem wir Wetterdaten in Echtzeit erhalten. In diesem Artikel erfahren Sie, wie Sie mit JavaScript und WebSocket-Technologie ein effizientes Echtzeit-Wettervorhersagesystem aufbauen. In diesem Artikel wird der Implementierungsprozess anhand spezifischer Codebeispiele demonstriert. Wir

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

So verwenden Sie insertBefore in Javascript So verwenden Sie insertBefore in Javascript Nov 24, 2023 am 11:56 AM

Verwendung: In JavaScript wird die Methode insertBefore() verwendet, um einen neuen Knoten in den DOM-Baum einzufügen. Diese Methode erfordert zwei Parameter: den neuen Knoten, der eingefügt werden soll, und den Referenzknoten (d. h. den Knoten, an dem der neue Knoten eingefügt wird).

So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript Jan 05, 2024 pm 01:37 PM

Einführung in die Methode zum Abrufen des HTTP-Statuscodes in JavaScript: Bei der Front-End-Entwicklung müssen wir uns häufig mit der Interaktion mit der Back-End-Schnittstelle befassen, und der HTTP-Statuscode ist ein sehr wichtiger Teil davon. Das Verstehen und Abrufen von HTTP-Statuscodes hilft uns, die von der Schnittstelle zurückgegebenen Daten besser zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mithilfe von JavaScript HTTP-Statuscodes erhalten, und es werden spezifische Codebeispiele bereitgestellt. 1. Was ist ein HTTP-Statuscode? HTTP-Statuscode bedeutet, dass der Dienst den Dienst anfordert, wenn er eine Anfrage an den Server initiiert

See all articles