Aktualisieren von Anwendungen, die in früheren Versionen von JScript erstellt wurden
Ein Großteil des vorhandenen JScript-Codes wird mit den Verbesserungen in JScript 10.0 fehlerfrei funktionieren, da JScript 10.0 nahezu vollständig abwärts kompatibel mit früheren Versionen ist. Die neuen Features von JScript 10.0 betreffen neue Bereiche.
Standardmäßig werden JScript 10.0-Programme im schnellen Modus kompiliert. Da der schnelle Modus Einschränkungen in Bezug auf die zulässigen Codearten mit sich bringt, können Programme damit schneller und effizienter ausgeführt werden. Manche Features, die in früheren Versionen verfügbar waren, sind jedoch im schnellen Modus nicht verfügbar. Diese Features waren zum Großteil inkompatibel mit Multithreadanwendungen und generierten ineffizienten Code. Bei Programmen, die mit dem Befehlszeilencompiler kompiliert wurden, können Sie den schnellen Modus deaktivieren und somit vollständige Abwärtskompatibilität nutzen. Beachten Sie, dass der so kompilierte Code langsamer und fehleranfälliger ist. Der schnelle Modus kann aufgrund von möglichen Stabilitätsproblemen in ASP.NET-Anwendungen nicht deaktiviert werden. Weitere Informationen finden Sie unter /fast.
Schneller Modus
Im schnellen Modus wird das folgende JScript-Verhalten ausgelöst:
Alle Variablen müssen deklariert werden.
Aus Funktionen werden Konstanten.
Systeminterne Objekte können keine expando-Eigenschaften haben.
Für systeminterne Objekte können keine Eigenschaften aufgelistet oder geändert werden.
Das Arguments-Objekt ist nicht verfügbar.
Einer/m schreibgeschützten Variablen, Methode oder Feld kann kein Wert zugewiesen werden.
eval-Methode kann keine Bezeichner im umschließenden Gültigkeitsbereich definieren.
Alle Variablen müssen deklariert werden
In früheren Versionen von JScript war eine explizite Deklaration von Variablen nicht erforderlich. Dieses Feature erspart dem Programmierer zwar umständliche Tastatureingaben, erschwert jedoch auch die Zurückverfolgung von Fehlern. Sie können z. B. einem falsch geschriebenen Variablennamen einen Wert zuweisen, der weder einen Fehler generiert noch das gewünschte Ergebnis zurückgibt. Außerdem haben nicht deklarierte Variablen einen globalen Gültigkeitsbereich, was zu weiterer Verwirrung führen kann.
Der schnelle Modus erfordert explizite Variablendeklarationen. Dadurch werden die obigen Fehler verhindert und Code generiert, der schneller ausgeführt wird.
JScript .NET unterstützt auch Variablen mit Typanmerkung. Dadurch wird jede Variable an einen bestimmten Datentyp gebunden, und die Variable kann nur Daten dieses Typs speichern. Die Typanmerkung ist zwar nicht erforderlich, trägt jedoch zur Vermeidung von Fehlern durch versehentliches Speichern der falschen Daten in einer Variablen sowie u. U. zu einer schnelleren Programmausführung bei.
Weitere Informationen finden Sie unter JScript-Variablen und -Konstanten.
Aus Funktionen werden Konstanten
In früheren Versionen von JScript wurden Funktionen, die mit der function-Anweisung deklariert wurden, genauso behandelt wie Variablen, die ein Function-Objekt enthielten. Insbesondere konnte jeder Funktionsbezeichner als Variable zum Speichern eines beliebigen Datentyps verwendet werden.
Im schnellen Modus werden aus Funktionen Konstanten. Daher können Funktionen keine neuen Werte zugewiesen werden, und sie können nicht umdefiniert werden. Dadurch wird ein versehentliches Ändern der Bedeutung einer Funktion ausgeschlossen.
Wenn für ein Skript die Änderung einer Funktion erforderlich ist, können Sie explizit festlegen, dass eine Variable eine Instanz des Function-Objekts speichert. Beachten Sie jedoch, dass Function-Objekte langsam ausgeführt werden. Weitere Informationen hierzu finden Sie unter Function-Objekt.
Systeminterne Objekte können keine expando-Eigenschaften haben
In früheren Versionen von JScript konnten expando-Eigenschaften zu systeminternen Objekten hinzugefügt werden. Aufgrund dieses Verhaltens konnte einem String-Objekt eine Methode hinzugefügt werden, mit der z. B. voranstehende Leerzeichen bei der Zeichenfolge entfernt werden konnten.
Im schnellen Modus ist dies nicht zulässig. Wenn dieses Feature für Ihr Skript erforderlich ist, müssen Sie das Skript ändern. Sie können Funktionen im globalen Gültigkeitsbereich definieren, anstatt sie als Methoden an Objekte anzuhängen. Schreiben Sie dann jede Instanz in dem Skript neu, in der eine expando-Methode durch das Objekt aufgerufen wird, sodass das Objekt an die entsprechende Funktion übergeben wird.
Eine erwähnenswerte Ausnahme zu dieser Regel stellt das Global-Objekt dar, das weiterhin expando-Eigenschaften aufweisen kann. Alle Bezeichner im globalen Gültigkeitsbereich sind im Prinzip Eigenschaften des Global-Objekts. Natürlich muss das Global-Objekt dynamisch erweiterbar sein, damit es das Hinzufügen neuer globaler Variablen unterstützen kann.
Für systeminterne Objekte können keine Eigenschaften aufgelistet oder geändert werden
In früheren Versionen von JScript konnten die vordefinierten Eigenschaften von systeminternen Objekten gelöscht, aufgelistet oder ergänzt werden. Aufgrund dieses Verhaltens konnte z. B. die toString-Standardmethode des Date-Objekts geändert werden.
Im schnellen Modus ist dies nicht zulässig. Dieses Feature ist nicht mehr notwendig, da systeminterne Objekte keine expando-Eigenschaften haben dürfen und die Eigenschaften für jedes Objekt im Referenzabschnitt aufgelistet werden. Weitere Informationen hierzu finden Sie unter Objekte.
Das Arguments-Objekt ist nicht verfügbar
In früheren Versionen von JScript wurde innerhalb von Funktionsdefinitionen ein arguments-Objekt bereitgestellt, durch das Funktionen eine beliebige Anzahl von Argumenten annehmen konnten. Das Arguments-Objekt stellte auch einen Verweis auf die aktuelle Funktion und die aufrufende Funktion bereit.
Im schnellen Modus ist das arguments-Objekt nicht verfügbar. Allerdings kann in JScript 10.0 durch Funktionsdeklarationen ein Parameterarray in der Funktionsparameterliste angegeben werden. Dadurch kann die Funktion eine beliebige Anzahl von Argumenten annehmen, wodurch ein Teil der Funktionalität des arguments-Objekts abgedeckt wird. Weitere Informationen hierzu finden Sie unter function-Anweisung.
Es gibt im schnellen Modus keine Möglichkeit, direkt auf die aktuelle Funktion oder die aufrufende Funktion zuzugreifen oder zu verweisen.
Einer/m schreibgeschützten Variablen, Methode oder Feld kann kein Wert zugewiesen werden
In früheren Versionen von JScript konnten Anweisungen einem schreibgeschützten Bezeichner scheinbar einen Wert zuweisen. Die Zuweisung schlug ohne weitere Meldung fehl. Die einzige Möglichkeit, diese nicht erfolgte Zuweisung festzustellen, bestand darin, zu testen, ob der Wert sich tatsächlich geändert hatte. Die Zuweisung zu einem schreibgeschützten Bezeichner ist in der Regel das Ergebnis eines Fehlers, da sie keinerlei Auswirkungen hat.
Im schnellen Modus wird ein Kompilierzeitfehler ausgelöst, wenn Sie versuchen, einem schreibgeschützten Bezeichner einen Wert zuzuweisen. Sie können entweder die Zuweisung entfernen oder versuchen, den Wert einem nicht schreibgeschützten Bezeichner zuzuweisen.
Wenn Sie den schnellen Modus deaktivieren, schlagen Zuweisungen zu schreibgeschützten Bezeichnern zur Laufzeit ohne weitere Meldung fehl, es wird jedoch eine Warnung zur Kompilierzeit ausgegeben.
eval-Methode kann keine Bezeichner im umschließenden Gültigkeitsbereich definieren
In früheren Versionen von JScript konnten Funktionen und Variablen durch einen Aufruf der eval-Methode im lokalen oder im globalen Gültigkeitsbereich definiert werden.
Im schnellen Modus können Funktionen und Variablen innerhalb eines Aufrufs der eval-Methode definiert werden, allerdings kann nur innerhalb dieses betreffenden Aufrufs auf sie zugegriffen werden. Nachdem eval abgeschlossen ist, kann nicht mehr auf die in eval definierten Funktionen und Variablen zugegriffen werden. Das Ergebnis einer Berechnung, die innerhalb einer eval-Methode ausgeführt wird, kann einer beliebigen Variablen zugewiesen werden, auf die im aktuellen Gültigkeitsbereich zugegriffen werden kann. Aufrufe der eval-Methode funktionieren langsam, daher sollten Sie in Erwägunng ziehen, Code, der solche Aufrufe enthält, umzuschreiben.
Das frühere Verhalten der eval-Methode wird wiederhergestellt, wenn der schnelle Modus deaktiviert wird.
Siehe auch
Referenz
Konzepte
Einführung in JScript 10.0 für JScript-Programmierer