Heimlich, still und leise hält die nächste Version von JavaScript Einzug in unsere Browser. Überschattet von Trubel um HTML5 und CSS3 merkt fast keiner, dass neben HTML und CSS auch das oft so verkannte JavaScript dabei ist, ein größeres Update zu erfahren und dass sich somit alle drei Grundpfeiler des Webs – HTML, CSS und eben JavaScript – weiterentwickeln. Dieser Artikel soll der Startschuss zu einer kleinen Serie sein, in der wir einen Blick auf ECMAScript 5 (oder kurz ES5) und damit die nähere Zukunft von JavaScript wagen werden. Besonderes Augenmerk werden wir natürlich darauf richten, in welchem Umfang die verschiedenen Neuerungen schon zu gebrauchen sind, doch unser erster Blick gilt den Hintergründe von ES5. Was ist eigentlich „ECMAScript“ und wieso hat es die Versionsnummer 5?

Was ist ECMAScript und wieso gibt es Version 5?

Als Anfang der 90er Jahre Brendan Eich für Netscape innerhalb weniger Tage eine kleine Browser-Programmiersprache zusammenschraubte, grassierte der Java-Wahn. Man war sich damals so sicher, dass Java die wichtigste Programmiersprache der Zukunft sein würde, dass man aus Marketinggründen entschied, die neue Browser-Programmiersprache JavaScript zu nennen – obwohl beide Technologien sich auch nicht nur im entferntesten ähneln. Dass man damit bis in alle Ewigkeit Verwirrung bei Webentwicklern stiften würde, war weniger wichtig, als dass man dort war, wo man damals „vorne“ vermutete.

JavaScript had to look like Java only less so, be Java’s dumb kid brother or boy-hostage sidekick.

 – Brendan Eich

Seither hat sich viel getan. Java hat überraschenderweise nicht die Weltherrschaft übernommen und stattdessen hat sich ausgerechnet JavaScript von einer Spielerei zur wichtigsten Programmiersprache der Welt verwandelt. Aufgrund des Namens-Deals, den Netscape seinerzeit mit dem Java-Entwickler Sun Microsystems eingefädelt hatte, liegen die Namensrechte heutzutage beim momentanen Sun-Besitzer Oracle, während die Spezifikationen der Sprache von einer privaten Normierungsorganisation namens Ecma International (ehemals ECMA – European Computer Manufacturers Association) gepflegt werden. Das, was wir alle als JavaScript kennen und bezeichnen, ist also eine Implementierung eines Standards namens ECMAScript bzw. ECMA-262.

Die letzte von allen heute verbreiteten Browsern unterstützte Fassung des Standards ist die dritte Edition von ECMA-262, die im November 2000 verabschiedet wurde. Die Pläne zu einer vierten Edition zerschellten unvollendet an ihren eigenen Ansprüchen – man wollte zu viel, konnte sich nicht einigen und stellte schließlich die Arbeit an der vierten Edition ein. So kam es, dass jetzt mit der fünften Fassung ein vergleichsweise bescheidenes Update im Anflug ist, ohne dass es je eine vierte gegeben hätte. Erklärtes Ziel von ECMAScript 5: die Sprache entrümpeln und robuster machen, damit man in Zukunft ein gutes Fundament für dann wieder hochtrabendere Pläne hat.

Was kann die neue Version?

Dafür, dass Brendan Eich nur wenige Tage Zeit hatte um JavaScript zu entwickeln und nebenbei unter enormem Druck aus der Netscape-Führungsetage stand, kann sich das Ergebnis sehen lassen.

I had to be done in ten days or something worse than JS would have happened.

 – Brendan Eich

Doch trotzdem haben sich aufgrund der Kürze der Zeit einige sehr sonderbare Eigenschaften in die Sprache eingeschlichen. Eine kleine Auswahl mit Beispielen, die sicher die meisten von uns kennen:

// Ergibt "object" statt "array"
typeof [];

// "bar" wird eine _globale_ Variable, weil das "var" vergessen wurde
function foo(){
    bar = 42;
}

// Ergibt "8"
parseInt('010');

Zwar hat jede Programmiersprache so ihre Macken, doch nur bei wenigen füllen die WTF-Momente ganze Websites und sogar Bücher. Oberstes Ziel von ES5 ist es, die Anzahl der genannten WTF-Momente zu reduzieren. Außerdem soll die Rubustheit von JavaScript erhöht werden – die Zeiten, als jedes Objekt jederzeit manipuliert werden konnte, sind vorbei. Und auch das Webentwickler-Leben soll durch eine Handvoll neuer Helferlein erleichtert werden. Im Einzelnen sind dabei:

  • Scripte und Teile von Scripts können in einen Strict Mode versetzt werden, in dem einige defekte JS-Altlasten (z.B. with(){}) nicht mehr verwendet werden können und der an einigen Stellen die Regeln von JavaScript so verändert, dass es weniger WTF-Momente gibt.
  • Mittel und Wege, um Objekte gegen Manipulationen zu sichern werden ebenso eingeführt wie Getter- und Setter-Methoden für Objekteigenschaften
  • Viele neue Helferlein lösen ganz alltägliche Probleme und reduzieren den Bedarf an kryptischen Eigenbau-Lösungen und Boilerplate-Code. Genannt seien unter anderem Object.create() (erstellt in einem Arbeitsschritt ein Objekt und legt seinen Prototyp fest), Array.isArray() und Array.prototype.forEach()

Einige dieser Features werden von heutigen JavaScript-Frameworks bereits bereitgestellt, so dass man sich durchaus fragen kann, ob ES5 einen überhaupt kümmern sollte.

Muss mich als jQuery-Nutzer ES5 überhaupt interessieren?

Wer wirklich niemals mehr macht, als via Framework ein paar DOM-Knoten durch die Gegend zu schrieben, kommt vermutlich die nächste Zeit auch ohne detaillierte Kenntnisse der meisten ES5-Features über die Runden. Einiges anderes, wie zum Beispiel die durchaus vorhandenen Gefahren des Strict Mode, sollte man aber in jedem Fall auf dem Schirm haben. Und schließlich gilt: die neuen Features einer Programmiersprache aus einer informierten Perspektive heraus zu ignorieren ist immer besser, als sie aus Gründen der Ignoranz nicht zu verwenden. Ebenfalls zu bedenken ist, dass JavaScript auch außerhalb des Browser mehr und mehr um sich greift. Egal ob Node.js oder Windows-Widgets, so manche Offline-Anwendung ist bereits heute in JS geschrieben. Und es ist nicht damit zu rechnen, dass sich dieser Trend so bald umkehrt – vor allem nicht, wenn die Sprache durch frische Features immer attraktiver wird.

Welche Browser unterstützen ES5 und wie geht es weiter?

JavaScript hat wie jede Browsertechnologie das Problem, dass man nicht einfach so eine neue Version rausbringen kann, die dann innerhalb kürzester Zeit überall verfügbar ist. Allerdings ist bei ES5 die Lage nicht ganz schlimm, wie man dieser Kompatibilitätstabelle entnehmen kann. Der Internet Explorer 8 ist, wie zu erwarten war, der Internet Explorer 6 von ES5, aber alle anderen Browser enthalten schon viele ES5-Features. Insbesondere bei Chrome, Firefox ab Version  4 und Internet Explorer ab Version 9 kann man von sehr guter Unterstützung sprechen. Die Lage stellt sich also rosig genug dar, um eine kleine Artikelserie zu rechtfertigen. Sofern sich genügend freie Zeit auftreiben lässt, werden es in den nächsten Wochen und Tagen noch vier weitere Artikel zum Thema ES5 erscheinen, die Einzelaspekte unter die Lupe nehmen. Wenn alles nach Plan läuft, werden wir in ein paar Tagen als erstes den Strict Mode behandeln – Feedback und Sonderwünsche sind dabei wie immer gern gesehen!