Donnerstag, 21. Januar 2010

ECMAScript 5 wurde veröffentlicht

Die als standardisierte Grundlage von JavaScript als auch JScript dienende Sprache ECMAScript wurde im Dezember 2009 in der Version 5 verabschiedet (kurz ES5) und um diverse Features aus den Mozilla-Ideen zur JavaScript 1.6 - 1.8 erweitert.

Der neue Standard führt einige neue APIs ein und soll vor allen Dingen robustere Programme ermöglichen. ES5 ist die direkte Nachfolgeversion von ECMAScript 3, denn ECMAScript 4 wurde auf Grund interner Streitigkeiten im Konsortium übersprungen.

Eine der wichtigsten Erweiterungen der neuen Version von ES5 ist die offizielle Aufnahme von JSON samt der offiziellen Implementierung einiger wichtiger Referenzfunktionen bzw. APIs (http://www.json.org/json2.js) in den Sprachumfang. Und damit werden auch Parsermethoden Einzug in die Sprache halten, die als Alternative für die Erzeugung eines Objektes aus JSON mittels eval() sowie die Extraktion eines Strings aus einem JSON-Objekt dienen (JSON.parse() und JSON.stringify()).

Mittels einer neuen Methode seal() kann man in Zukunft (wenn dieser Standard in JavaScript beziehungsweise JScript umgesetzt ist) seine Objekte gegen eine versehentliche Veränderung schützen. Eine als Parameter übergebene Eigenschaft eines Objekts wird gegen die Veränderung seiner Beschreibungen geschützt und es können keine neuen Properties hinzugefügt werden. Man wird sogar Objekte einfrieren können (freeze()). In dem Fall sind auch die Werte von Eigenschaften und veränderlich. In die gleiche Stoßrichtung zielt die Fixierung Objekte mit preventExtension(). Ein so gekennzeichnetes Objekt lässt sich nicht mehr um weitere Methoden und Eigenschaften ergänzen. Mit den zusätzlichen booleschen Methoden isFrozen() und isSealed() können Sie herausfinden, ob ein Objekt auf die eine oder andere Weise geschützt ist.

Für die Arbeit mit Datenfeldern sind die Methoden wie forEach(), map() und filter() aus JavaScript 1.6 offiziell in ES5 aufgenommen worden. Mit keys() kann die Bezeichnung der Methoden und Eigenschaften eines Objektes ermittelt werden.

Die vielleicht wichtigste beziehungsweise im professionellen Umfeld nützlichste Neuerung von ECMAScript 5 (neben der offiziellen Unterstützung von JSON) ist die Möglichkeit der Festlegung, dass die Verarbeitung von einem Skript nach strengen Regeln zu erfolgen hat. Das macht man mit der Anweisung "use strict", die als String am Beginn eines Skripts oder einer Funktion zu notieren ist. Der Ansatz mit der einfachen Notation eines Strings im Code soll verhindern, dass es zu Inkompatibilitäten mit bestehendem Code und ES5 kommt.
Solch ein strenger Verarbeitungsmodus erzwingt beispielsweise, dass man Variablen sauber deklarieren muss und auch keine Zuweisung von Werten zu Objekteigenschaften vornehmen kann, ohne dass sie vorher deklariert wurden. Damit wird eine der tückischsten Fehlerquellen von JavaScript beseitigt, die sich auf Grund der losen Typisierung ergibt. Eine weitere Folge des strengen Verarbeitungsmodus ist, dass das Datenfeld arguments, über das die an eine Funktion übergeben Parameter zu finden sind, nicht mehr verändert werden kann. Auch wird in diesem Modus die Funktionalität von eval() sicherheitsrelevant eingeschränkt. Ebenso ist die bisweilen optionale Verwendung von Semikola zum Abschluss eines Befehls dann verboten. Aber auch die weiteren Reglementierungen in diesem Modus bewegen neue Versionen von JavaScript in Richtung einer sicheren und vor allen Dingen wartbaren Sprache. Wird Code mit der Einstellung "use strict" aktiviert, soll der Code nur dann ohne Fehlermeldung ausgeführt werden, wenn die Interpretation des Codes eindeutig ist. Dies soll die Ausführung von Skripten zudem schneller machen.

In ES5 sind Eigenschaften eines Objektes nicht mehr nur einfache Schlüssel-Wert-Paare. Jede Eigenschaft besitzt explizit Attribute. Mit defineProperty() können dabei die Eigenschaften eines Objektes und die jeweiligen Attribute auch dynamisch zur Laufzeit definiert werden.
In vielen professionellen Programmiersprachen wie Java ist es üblich, dass man den Zugang zu Eigenschaften von Objekten nicht direkt gestattet. Stattdessen verwendet man indirekte Zugriffe über so genannte Getter und Setter. Das sind Methoden, über die Werte von Eigenschaften abgefragt (die Methode heißt in EC5 standardisiert get()) oder gesetzt (die Methode heißt entsprechend immer set()) werden können. Diese Philosophie wird auch in ECMAScript 5 eingeführt. Es gibt zudem entsprechende Eigenschaften, auf die direkt zugegriffen werden kann (Value Properties) und solche, auf die nur noch indirekt zugegriffen werden kann (Accessor Properties). Diese Accessor Properties verfügen neben den Gettern und Settern über Attribute wie writeable, configurable und enumerable, über die verschiedener Verhaltensweisen von Eigenschaften festgelegt werden. Mit der booleschen Eigenschaft writeable bestimmen Sie, ob eine Eigenschaft gegen Veränderung geschützt ist. Mit configurable erlauben Sie eine Konfigurierung (etwa ob eine Eigenschaft gelöscht werden kann und ob andere Attribute veränderbar sind). Und mit der Eigenschaft enumerable können Sie bestimmen ob eine Eigenschaft in einer Schleife wie for...in mit aufgezählt wird oder nicht.

ECMAScript 5 führt Skripte ein, die im Hintergrund laufen können. Diese nennen die Verantwortlichen Web Workers. Erzeugt werden solche Web Workers als Objekte vom Typ der neuen Klasse Worker.
Solche Skripte blockieren die normale Benutzerinteraktion bzw. Webseite nicht, sondern laufen wie im Fall von echtem Multithreading parallel dazu ab. Die Kommunikation mit so einem Hintergrundprozess erfolgt mit einem neuen Eventhandler onmessage.
Das Worker-Objekt selbst kann nun mittels der Funktion postMessage() Nachrichten an seinen Erzeuger versenden.
Kommentar veröffentlichen

Onlinetraining mit Ralph Steyer

Onlinetraining mit Ralph Steyer
Onlinetraining mit Ralph Steyer und anderen Autoren bei Video2Brain