Dieser Artikel vermittelt Ihnen relevantes Wissen über JavaScript und stellt vor allem Probleme im Zusammenhang mit dem strikten Modus vor. Es handelt sich um einen restriktiven JavaScript-Modus, der dazu führt, dass der Code implizit vom „Lazy-Modus“ abweicht Ich hoffe, dass es für alle hilfreich sein wird.
[Verwandte Empfehlungen: Javascript-Video-Tutorial, Web-Frontend]
Im ECMAScript5-Standard schlug JavaScript das Konzept des strikten Modus vor:
Der strikte Modus ist leicht zu verstehen. Es handelt sich um einen restriktiven JavaScript-Modus, der dazu führt, dass der Code implizit aus dem „Lazy Mode“ ausbricht.
Wenn ein Browser, der den strikten Modus unterstützt, den strikten Modus im Code erkennt, erkennt er den Code und führt ihn strenger aus.
Der strikte Modus erlegt der normalen JavaScript-Semantik einige Einschränkungen auf:
Der strikte Modus beseitigt einige der ursprünglichen stillen Fehler , indem er sie auslöst .
Im strikten Modus kann die JS-Engine beim Ausführen von Code mehr Optimierungen durchführen (ohne sich mit einer speziellen Syntax befassen zu müssen).
Der strikte Modus deaktiviert einige Syntaxen, die möglicherweise in zukünftigen Versionen von ECMAScript definiert werden.
Wie aktiviert man also den strikten Modus? Der strikte Modus unterstützt eine granulare Migration:
Kann das Aktivieren des strikten Modus in JS-Dateien unterstützen;
Es unterstützt auch das Aktivieren des strikten Modus für eine bestimmte Funktion;
JavaScript ist so konzipiert, dass es für unerfahrene Entwickler einfacher zu verwenden ist. Daher hat es manchmal eine falsche Syntax, aber ich glaube nicht, dass es normal analysiert werden kann.
Diese Methode kann jedoch Sicherheitsrisiken bergen;
Im strikten Modus wird diese Art von Transaktion als Fehler behandelt, sodass sie schnell entdeckt und korrigiert werden kann;
Hier ist eine Zusammenfassung einiger häufiger Einschränkungen:
Es gibt zwei Möglichkeiten, versehentlich globale Variablen zu erstellen:
Deklarieren Sie globale Variablen direkt global, ohne Schlüsselwörter zu verwenden
Wenn Sie eine Variable ohne Verwendung von Schlüsselwörtern innerhalb einer Funktion deklarieren, wird die Funktion standardmäßig zu einer globalen Variablen hochgestuft. Der Beispielcode lautet wie folgt:
'strikt verwenden' // Versehentliche Erstellung globaler Variablen deaktivieren message = 'Versehentliche Erstellung globaler Variablen' console.log(message) //Die Fehlermeldung lautet: Uncaught ReferenceError: Nachricht ist nicht definiert Funktion foo () { Alter=20 console.log(Alter) } foo() // ReferenceError: Alter ist nicht definiert
Der Beispielcode lautet wie folgt:
//Strikten Modus aktivieren und das Problem direkt in einen Fehler umwandeln „Strikt verwenden“ const v = 100;//(Konstante definieren) v = 1,14; //Wert neu zuweisen (zur Variable) console.log(v); // Nicht erfasster TypeError: Zuweisung zu konstanter Variable.
Im strikten Modus können Sie den Deselect-Operator nicht für Variablen verwenden.
// Strikten Modus einschalten „strikt verwenden“ var v = 100; delete v;//Im nicht strengen Modus: Dies ist ein stiller Fehler, es wird weder ein Fehler gemeldet noch die Variable v gelöscht. console.log(v);//100 //Nach dem Einschalten des strikten Modus wird stattdessen ein Fehler gemeldet. Löschen eines unqualifizierten Bezeichners im strikten Modus.
Im strikten Modus hat die Verwendung des Schlüsselworts delete für Arrays und Methodenattribute den gleichen Effekt.
// Strikten Modus einschalten „strikt verwenden“ // 1. Array-Inhalt im strikten Modus löschen var arr = [1,2,3,4] arr[0] löschen; console.log(arr);//[ <1 leeres Element>, 2, 3, 4 ] // 2. Attribute der Löschfunktion im strikten Modus var obj = { Name: „Schweinemann“ } obj.name löschen; console.log(obj.name)//undefiniert
Der Beispielcode lautet wie folgt:
'strikt verwenden' // Funktionen mit demselben Parameternamen sind nicht zulässig function foo2 (x, y, x) { console.log(x, y, x) } foo2(10, 20, 30) // SyntaxError: Doppelter Parametername in diesem Kontext nicht zulässig
Der Beispielcode lautet wie folgt:
// Das ursprüngliche Oktalformat var num1 = 0123 ist nicht zulässig var num2 = 0o123 // Kann in diesem Format als Oktal geschrieben werden var num3 = 0x123 // Kann in diesem Format als Hexadezimal geschrieben werden var num4 = 0b100 // Kann in diesem Format als Binärformat geschrieben werden console.log(num1) // SyntaxError: Oktalliterale sind im strikten Modus nicht zulässig. console.log(num2, num3, num4) // 83 291 4
Der Beispielcode lautet wie folgt:
'strikt verwenden' var message = 'Hallo Welt'; var obj = { Name: 'jam', Alter: 20 } // Die with-Anweisung kann einen eigenen Bereich bilden. Wenn das Alter in der with-Anweisung gedruckt wird, wird das Altersattribut im obj-Objekt ausgegeben. Wenn jedoch die nicht vorhandene Attributnachricht in der with-Anweisung gedruckt wird Eine Ebene zum äußeren Bereich, um die Funktion foo () { zu finden. mit (obj) { console.log(Alter) console.log(Nachricht) } console.log(Nachricht) } foo() // SyntaxError: Code im strengen Modus enthält möglicherweise keine with-Anweisung
Der Beispielcode lautet wie folgt:
var jsString = "var message = 'hello world';console.log(message)" eval(jsString) // Hallo Welt ausgeben console.log(message) //Die Fehlermeldung lautet: ReferenceError: Nachricht ist nicht definiert
开启严格模式eval函数不会向上引用变量所以全局作用域就没有message这个变量所以会报错
Der Beispielcode lautet wie folgt:
'strikt verwenden' // Im strikten Modus zeigt die selbstausführende Funktion (Standardbindung) auf undefiniert und im nicht strikten Modus auf window Funktion foo () { console.log(dies) } foo() // undefiniert