Freigeben über


Aktualisieren von Anwendungen, die in früheren Versionen von JScript erstellt wurden

Aktualisiert: November 2007

Ein Großteil des vorhandenen JScript-Codes wird mit den Verbesserungen in JScript 8.0 fehlerfrei funktionieren, da JScript 8.0 nahezu vollständig abwärts kompatibel mit früheren Versionen ist. Die neuen Features von JScript 8.0 betreffen neue Bereiche.

Standardmäßig werden JScript 8.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.

  • eval-Methode führt Skripts in einem eingeschränkten Sicherheitskontext aus.

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 8.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.

eval-Methode führt Skripts in einem eingeschränkten Sicherheitskontext aus

In früheren Versionen von JScript wurde Code, der an die eval-Methode übergeben wurde, im gleichen Sicherheitskontext ausgeführt wie der aufrufende Code.

Zum Schutz der Benutzer wird der an die eval-Methode übergebene Code in einem beschränkten Sicherheitskontext ausgeführt, es sei denn, die Zeichenfolge "unsafe" wird als zweiter Parameter übergeben. Der beschränkte Sicherheitskontext trägt dazu bei, den Zugriff auf Systemressourcen, z. B. das Dateisystem, das Netzwerk oder die Benutzeroberfläche, zu verhindern. Wenn der Code versucht, auf diese Ressourcen zuzugreifen, wird eine Sicherheitsausnahme ausgelöst.

Wenn der zweite Parameter von eval die Zeichenfolge "unsafe" ist, wird der an die eval-Methode übergebene Code im gleichen Sicherheitskontext wie der aufrufende Code ausgeführt. Dadurch wird das frühere Verhalten der eval-Methode wiederhergestellt.

Sicherheitshinweis:

Verwenden Sie eval im nicht gesicherten Modus nur, um Codezeichenfolgen aus bekannten Quellen auszuführen.

Siehe auch

Konzepte

Einführung in JScript 8.0 für JScript-Programmierer

Referenz

/fast

Weitere Ressourcen

Erste Schritte mit JScript