JavaScript: Entstehung und Standardisierung

Wer legt fest, was JavaScript ist?

Im Gegensatz zu HTML und CSS gibt es keine zentrale, geschlossene technische Spezifikation, die normativ festlegt, was JavaScript ist und was ein JavaScript-fähiger Browser können muss. JavaScript ist vielmehr ein Flickenteppich aus verschiedenen Spezifikationen und Industriestandards, die von verschiedenen Firmen und Gremien herausgegeben werden. Dies macht die Lage für Einsteiger ungemein schwierig und unübersichtlich.

Neben dem mehr oder weniger umrissenen Sprachkern gibt es eine Fülle von Techniken, die über JavaScript nutzbar sind. Man spricht von sogenannten APIs (engl. application programming interface – Programmierschnittstellen). Die Weiterentwicklung von JavaScript besteht zum großen Teil darin, dass neue APIs erfunden und durch die Browser implementiert (umgesetzt, unterstützt) werden.

»JavaScript« ist demnach ein offener Begriff, der jegliches Scripting auf Basis von ECMAScript zusammenfasst. Dass man heute vereinfachend von »JavaScript« spricht, hat bloß historische Gründe hat – technisch gesehen ist JavaScript ein Mischmasch aus unterschiedlichen, nicht miteinander abgestimmten Techniken.

Anfangszeit mit Netscape JavaScript und Microsoft JScript

Der Name JavaScript ist eine Marke der Firma Netscape, die die Sprache einst aus der Taufe gehoben hat. Netscape gab in den 90er-Jahren verschiedene JavaScript-Spezifikationen heraus, die Versionsnummern trugen (1.0, 1.1, 1.2, 1.3 und 1.5). Es handelte sich hierbei um herstellereigene, sogenannte proprietäre Erfindungen. Die Spezifikationen dokumentierten die Techniken, die der hauseigene Browser namens Netscape Navigator in den Versionen 2.0 bis 4.8 unterstützte (TODO).

Der Hintergrund der Entstehung von JavaScript war der sogenannte Browserkrieg: Eine Zeit des Wettlaufs, in der Netscape und Microsoft ihre Browsern mit proprietären Besonderheiten aufwerteten, um dem Konkurrenten Marktanteile zu rauben. Microsoft erkannte schnell die Nützlichkeit von JavaScript und setzte die JavaScript-Spezifikation auch im eigenen Browser, dem Internet Explorer um. Aus markenrechtlichen Gründen nannte Microsoft seine JavaScript-Umsetzung JScript. Der eigene Name ging mit eigenen Zusätzen und Besonderheiten einher, wodurch sich Netscapes JavaScript und Microsofts JScript auseinander entwickelten.

Für Webentwickler war es ein Horror, sich in derselben Sprache mit unterschiedlichen Ansätzen herumplagen zu müssen, um browserübergreifend dasselbe zu erreichen. Microsoft und Netscape sahen das ein und strebten die Standardisierung der Sprache durch unabhängige Gremien an. Heraus kamen zwei Spezifikationen, die nach wie vor das meiste abdecken, was wir heute unter JavaScript verstehen.

ECMAScript standardisiert die Sprachgrundlagen

Die Grundlagen von JavaScript wurden ganz allgemein in ECMAScript (ECMA-262) festgelegt. ECMA steht dabei für die Standardisierungsorganisation, die die technische Spezifikation herausgibt. Maßgeblich ist derzeit die dritte Ausgabe aus dem Jahr 1999 (ECMAScript Edition 3).

ECMAScript ist sehr abstrakt gehalten und klammert den für JavaScript charakteristischen Rahmen (Fenster, Dokumente, Ereignisse usw.) aus. Stattdessen definiert ECMAScript eine vielseitige Meta-Sprache, ein Grundgerüst für viele mögliche Programmiersprachen, und beschreibt deren Syntaxregeln, deren grundlegende Objekttypen sowie die Verarbeitung von Programmen. Dadurch stellt ECMAScript nicht nur das Herzstück von JavaScript bereit, sondern wird auch an anderen Stellen eingesetzt – übrigens auch serverseitig.

Unglücklicherweise ist der ECMAScript-Standard für Normalsterbliche unverständlich, sodass er als praktische Referenz weitgehend ungeeignet ist. Sie können die offizielle Spezifikation dennoch als PDF-Datei herunterladen. Zur einfacheren Arbeit mit der Spezifikation wurde sie inoffiziell in eine große HTML-Datei konvertiert. In dieser können Sie einfacher nachschlagen oder einzelne Abschnitte verlinken. Doch wie gesagt: Diese Dokumente sind leider für nur für diejenigen verständlich, die sich bereits intensiv mit JavaScript auseinandergesetzt haben.

Der ECMAScript-Standard wird nach einer langen Ruhezeit wieder weiterentwickelt. Die Arbeiten an der kommenden Ausgabe, ECMAScript 5, sind in vollem Gange. Siehe dazu weiter unten.

W3C DOM standardisiert den Dokumentzugriff

Auf der anderen Seite war eine Standardisierung des Zugriffs auf das HTML-Dokument nötig. Sowohl Netscape als auch Microsoft erfanden eigene DHTML-Modelle – DHTML steht dabei für dynamisches HTML. Beide Modelle waren jedoch beschränkt, undurchdacht und zu allem Überfluss zueinander nicht kompatibel.

Ein weiteres Standardisierungsgremium, das World Wide Consortium (W3C) kam schließlich zur Hilfe. In Zusammenarbeit mit den Browserherstellern wurde das sogenannte Document Object Model (DOM) erarbeitet. Die DOM-Programmierschnittstelle nimmt in der JavaScript-Anwendung eine zentrale Stellung ein und ist in vielerlei Hinsicht Referenzpunkt für JavaScript-Programmierer. Näheres erfahren Sie auf der DOM-Einstiegsseite des W3C.

Überblick über die DOM-Standards

Bei dem DOM handelt es sich nicht um eine einzelne technische Spezifikation, sondern um eine ganze Familie von auf einander aufbauenden, sich ergänzenden Spezifikationen. Die meisten darin definierten Schnittstellen sind über JavaScript nutzbar, aber sie sind allesamt Programmiersprachen-unabhängig definiert.

Darüber hinaus gibt es noch viele weitere DOM-Spezifikationen, von denen für die JavaScript-Programmierung im Web vor allem zwei interessant sind:

Die tatsächlichen Spezifikationen finden Sie unter Document Object Model (DOM) Technical Reports aufgelistet.

Derzeit aktuell ist DOM Level 3, allerdings sind nicht alle der besagten Techniken bei dieser Version angekommen. Das Kern-DOM liegt in Version 3 vor (TODO: Datum), das HTML-DOM in Version 2 (TODO: Datum).

Hersteller-eigene Techniken und De-facto-Standards

Bisher haben wir drei Quellen kennengelernt, aus denen sich JavaScript heutzutage zusammensetzt:

  1. Netscape JavaScript
  2. ECMAScript
  3. W3C DOM

Lediglich ECMAScript und DOM sind anerkannte herstellerübergreifende Industriestandards, auf denen wir heute vergleichsweise zuverlässig aufbauen können. Leider decken sie längst nicht das gesamte JavaScript ab, mit dem wir es heute zu tun haben. Außerdem haben die Browser immer noch einige Lücken und Fehler bei der Umsetzung dieser Standards.

Heutige JavaScripte machen auf breiter Front Gebrauch von nicht-standardisierten Objekten, die ursprünglich ein Browserhersteller erfunden hat. Viele proprietäre Techniken erwiesen sich als nützlich, andere Browserhersteller übernahmen sie und sie mauserten sich zu De-Facto-Standards.

Diese Techniken können bei entsprechender Browserunterstützung ohne Bedenken verwendet werden. Sie sind jedoch teilweise konzeptionell unausgereift, sodass sie dem Anwender unkomfortabel erscheinen. Oder sie sind schlecht spezifiziert, sodass andere Browserhersteller das Verhalten nicht hundertprozentig nachbauen konnten.

Mozilla-Erweiterungen: JavaScript 1.6 bis 1.8

Im Jahr 1999 wurde die Entwicklung des Netscape Navigators eingestellt und der Quellcode freigegeben. Die Firma Netscape stieg damit aus der aktiven Browserentwicklung aus. Das Projekt Mozilla trat das Erbe von Netscape an, indem es den Quellcode weiterentwickelte und einen Open-Source-Browser herausbrachte. Daraus entstand die Gecko-Engine, auf der u.a. der verbreitete Mozilla Firefox basiert. Mittlerweile ist Mozilla ein eigenständiges Unternehmen und ein einflussreicher Akteur auf dem Browsermarkt.

Auch wenn Mozilla Standardkonformität und Standardisierung anstrebt, erfand das Projekt eine Reihe von Erweiterungen des JavaScript-Kerns. Dies kommt vor allem daher, dass Firefox selbst und insbesondere Firefox-Erweiterungen starken Gebrauch von JavaScript machen. Die Erweiterungen vereinfachen die Entwicklung dieser internen Scripte und erlauben eine effizientere und mächtigere Programmierung. Manche Neuheiten krempeln sogar komplett die JavaScript-Syntax um.

Leider wählten die Mozilla-Entwickler einen verwirrenden Weg: Sie nahmen die alte JavaScript-1.5-Spezifikationen von Netscape, pflegten ihre Erweiterungen ein und nannten das ganze JavaScript 1.6, 1.7 sowie 1.8.

JavaScript 1.6 bis 1.8 ist entgegen des Namens nicht offiziell oder maßgeblich, sondern nur eine Weiterführung des Netscape-Markennamens »JavaScript« und dessen Versionierung durch das Mozilla-Projekt. Der Status dieser drei Spezifikationen ist ein ganz anderer: Das ursprüngliche Netscape-JavaScript 1.5 ist weitgehend identisch mit ECMAScript Edition 3, welches wie gesagt breit unterstützt wird. Mozilla-JavaScript 1.6 bis 1.8 hingegen sind proprietäre Erweiterungen, die nur teilweise von anderen Browsern wie Safari/Chrome (Webkit-Engine) und Opera übernommen wurden. So nützlich manche der Erweiterungen sind, sie können sich nicht stillschweigend darauf verlassen, dass andere Browser sie unterstützen.

TODO: Links und Vorstellung

JavaScript 1.6
JavaScript 1.7
JavaScript 1.8

HTML 5 spezifiert De-facto-Standards

HTML 5 ist die kommende Version von HTML, die nicht bloß HTML als Auszeichnungssprache fortsetzt, sondern die Web-Plattform fit für komplexe und dynamische Webanwendungen machen soll. Webanwendungen, die vor allem durch JavaScript angetrieben werden.

HTML 5 wurde ursprünglich von einer unabhängigen Gruppe namens WHATWG (Web Hypertext Application Working Group TODO) aus Unzufriedenheit mit dem Kurs des World Wide Consortium (W3C) ins Leben gerufen. Die WHATWG gewann nach und nach die Unterstützung verschiedener Browserhersteller und namhafter Web-Unternehmen. Schließlich vollzog das W3C eine Kehrtwendung und holte die entstehende HTML-5-Spezifikation ins Boot. Die WHATWG besteht als Gremium fort, sodass HTML 5 derzeit von zwei Communities und Organisationen getragen wird. HTML 5 befindet sich derzeit in der Entwurfsphase und soll bald ein offizieller W3C-Standard (Recommendation) werden.

HTML 5 ist der Nachfolger von HTML 4.01 und XHTML 1.0, aber auch gleichzeitig der Nachfolger von W3C DOM 2 HTML. Die kommende HTML-Spezifikation definiert also gleichzeitig die DOM-Schnittstelle für HTML-Dokumente. Während das bisherige HTML-DOM sehr begrenzt und mitunter unkomfortabel war, erweitert das HTML-5-DOM die Möglichkeiten und vereinfacht Prozesse immens.

Ein Hauptanliegen von HTML 5 ist es, mit dem unbefriedigenden Wust von unzureichend beschriebenen Verfahren aufzuräumen. HTML 5 soll Ordnung in das Durcheinander bringen, indem es verbreitete und bewährte, aber bisher proprietäre JavaScript-APIs standardisiert. Paving the cowpaths, Pflastern der Trampelpfade, nennen die Herausgeber das Konzept, vorhandene Techniken detailliert und verbindlich zu beschreiben.

Mit HTML 5 soll die gesamte HTML-spezifische Objektumgebung erstmals an zentraler Stelle definiert werden. Darunter das oberste, globale Objekt window. Dieses stammt aus Netscape JavaScript 1.0, wurde danach aber in keinem Industriestandard erwähnt. Insofern ist HTML 5 ist ein großer Fortschritt und ein Hoffnungsschimmer, denn es wird die browserübergreifende Programmierung vereinfachen und den Dschungel von Techniken unterschiedlicher Herkunft lichten.

Im Rahmen dieses Entwicklungsprozesses entstehen neue und äußerst mächtige JavaScript-APIs, die die Fähigkeiten von Websites und Webanwendungen potenzieren. TODO: Vorstellung. Canvas, Web Worker, Storage, Database, Drag and Drop ...

ECMAScript 5 erweitert den Sprachkern und räumt mit Altlasten auf

Statistisch gesehen ist ECMAScript die erfolgreichste Scriptsprache der Welt: Auf Milliarden Rechnern ist ein Browser mit JavaScript-Interpreter installiert. Dieser Erfolg beruht ironischerweise nicht auf den Fähigkeiten von JavaScript. JavaScript ist eine mächtige Sprache, die weitestgehend unzugänglich und unliebsam blieb.

TODO: Crockfords Artikel verlinken

Als ECMAScript 3 Ende der 90er-Jahre verabschiedet wurde, war nicht absehbar, dass eines Tages riesige Webanwendungen mit tausenden Codezeilen entwickelt werden. Die JavaScript-Entwicklung im großen Stil bringt bestimmte Anforderungen mit sich, denen JavaScript nicht ohne weiteres genügt.

ECMAScript 5 ist eine abwärtskompatible Weiterentwicklung von ECMAScript 3. Die Versionsnummer 4 wurde übersprungen, um Missverständnisse zu vermeiden: Es gab nämlich Entwürfe für ECMAScript 4, welche inhaltlich eine ganz andere Richtung einschlugen und später verworfen bzw. verschoben wurden.

Die fünfte Ausgabe beseitigt Fehler und Unklarheiten, wartet aber auch mit einigen Neuheiten auf. ECMAScript 3.1 nimmt einige nützliche Funktionen u.a. von Arrays und Strings auf, die Mozilla für die Gecko-Engine erfunden hatte (siehe JavaScript 1.6 bis 1.8).

Es existiert bereits ein nahezu fertiger Final Draft (letzter Entwurf) aus dem April 2009.

TODO: fortsetzen

ECMAScript »Harmony«