Im Gegensatz zu HTML und CSS gibt es keine zentrale, geschlossene technische Spezifikation, die 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 schwierig und unübersichtlich.
Neben dem klar 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 historische Gründe. JavaScript ist ein Mischmasch unterschiedlicher, nicht aufeinander abgestimmter Techniken.
Der Name JavaScript ist eine Marke der Firma Netscape, die die Sprache im Jahr 1995 ins Leben gerufen hat. Netscape gab in den 90er-Jahren verschiedene JavaScript-Spezifikationen heraus. Es handelte sich hierbei um herstellereigene, sogenannte proprietäre Erfindungen. Die Spezifikationen dokumentierten die Techniken, die der hauseigene Browser Netscape Navigator unterstützte.
Der Hintergrund der Entstehung von JavaScript war der sogenannte Browserkrieg. In dieser Zeit werteten die Firmen Netscape und Microsoft ihre Browsern mit proprietären Techniken auf, 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.
Die Grundlagen von JavaScript wurden in ECMAScript festgelegt. ECMA ist eine Standardisierungsorganisation, die die technische Spezifikation herausgibt. Maßgeblich ist derzeit die achte Ausgabe aus dem Jahr 2017 (ECMAScript 2017, Edition 8).
ECMAScript ist abstrakt gehalten und klammert den für JavaScript charakteristischen Rahmen aus (Fenster, Dokumente, Knoten, Ereignisse usw.). Stattdessen definiert ECMAScript eine vielseitige Meta-Sprache, ein Grundgerüst für viele mögliche Programmiersprachen. ECMAScript beschreibt Syntaxregeln, 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.
Die ECMAScript-Spezifikation richtet sich an Spezialisten, die einen Parser oder Interpreter entwickeln. Die Beschreibungen sind kurz und möglichst formal gehalten. Für Normalsterbliche ist die Spezifikation unverständlich, sodass sie als praktische Referenz ungeeignet ist. Sie können die offizielle Spezifikation dennoch lesen.
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 nicht zueinander kompatibel.
Das World Wide Consortium (W3C), ursprünglich verantwortlich für die Standardisierung von HTML und CSS, kam schließlich zur Hilfe. In Zusammenarbeit mit den Browserherstellern wurde das sogenannte Document Object Model (DOM) erarbeitet. Heute werden Teile des DOMs durch eine weitere Standardisierungsgruppe gepflegt, die Web Hypertext Application Technology Working Group (WHATWG).
Bei dem DOM handelt es sich nicht um eine einzelne technische Spezifikation, sondern um eine Familie von auf einander aufbauenden, sich ergänzenden Spezifikationen. Die meisten darin definierten Schnittstellen sind über JavaScript nutzbar, aber sie sind Programmiersprachen-unabhängig definiert.
Das Kern-DOM und das HTML-DOM sind die wichtigsten Referenzpunkte für JavaScript-Programmierer. Ein Großteil der Programmierung besteht aus der Nutzung dieser Techniken.
Es noch weitere DOM-Spezifikationen, von denen für die JavaScript-Programmierung vor allem zwei interessant sind:
Die tatsächlichen Spezifikationen sind:
Ursprünglich war das World Wide Consortium (W3C) für die Standardisierung von HTML verantwortlich. Ab 2004 kam die Forderung auf, das Web fit für komplexe und dynamische Webanwendungen zu machen. Webanwendungen, die vor allem durch JavaScript angetrieben werden. Aus Unzufriedenheit mit dem Kurs des W3C gründete sich die Web Hypertext Application Working Group (WHATWG) und begann damit, die brachliegende HTML-Spezifikation in kleinen Schritten weiter zu entwickeln.
Die WHATWG gewann nach und nach die Unterstützung verschiedener Browserhersteller und namhafter Web-Unternehmen. Im Jahr 2007 vollzog das W3C eine Kehrtwendung und begann mit der Entwicklung von HTML 5 auf der Basis des WHATWG-Entwurfes. Schließlich verabschiedete das W3C im Jahr 2014 offiziell den HTML-5-Standard.
Die WHATWG besteht als Gremium fort, sodass HTML derzeit von zwei Gruppen und Organisationen fortentwickelt wird. Während das W3C abgeschlossene Standards mit Versionsnummer (5, 5.1, 5.2 usw.) herausgibt, arbeitet das WHATWG an einer ständig aktualisierten Spezifikation ohne Versionsnummer.
Vor HTML 5 definierte die HTML-Spezifikation lediglich eine Auszeichnungssprache. Der Zugriff auf HTML-Dokumente mit JavaScript, das HTML-DOM, wurde in einer getrennten Spezifikation definiert. Seit HTML 5 definiert die HTML-Spezifikation sowohl die Auszeichnungssprache als auch die DOM-Schnittstelle.
Das Hauptanliegen von HTML 5 war es, verbreitete und bewährte JavaScript-Techniken erstmals zu standardisieren. Paving the cowpaths, Pflastern der Trampelpfade, nennen die Herausgeber das Konzept, vorhandene Techniken detailliert und verbindlich zu beschreiben. Erst mit HTML 5 wurde die HTML-spezifische Objektumgebung an zentraler Stelle definiert – darunter das oberste, globale Objekt window
.
Als ECMAScript Edition 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 das zugrunde liegende ECMAScript nicht genügte. Es wurde offensichtlich, dass ECMAScript weiterentwickelt werden musste.
Zunächst wurde an Entwürfen für ECMAScript Edition 4 gearbeitet. Ziel war es, die Sprache grundlegend umzukrempeln. Dieser Umbau wurde jedoch verschoben zugunsten einer kleinschrittigen Erweiterung. Die Entwürfe für Edition 4 wanderten erst einmal in die Schublade. Um Missverständnisse zu vermeiden, wurde die Versionsnummer 4 übersprungen. Es begann die Arbeit an der Edition 5, die schließlich 2009 verabschiedet wurde.
ECMAScript 5 ist eine abwärtskompatible Weiterentwicklung von ECMAScript 3. Die fünfte Ausgabe beseitigt vor allem Fehler und Unklarheiten, wartet aber auch mit einigen Neuheiten auf.
Die wichtigste Neuerung ist der Strict Mode. JavaScript-Code kann auf zwei Weisen ausgeführt werden: Im herkömmlichen, nachsichtigen Modus und im neuen, strengen Modus – dem Strict Mode. Letzterer beseitigt zahlreiche Fallstricke, die die JavaScript-Programmierung erschwerten. Der Strict Mode ermöglicht es, robusten und sicheren Code zu schreiben, der auf problematische Techniken verzichtet.
Der Strict Mode lässt sich im JavaScript-Code mittels 'use strict';
einschalten. Der Programmierer muss also ausdrücklich einwilligen, dass der Code im strengen Modus ausgeführt wird. Darin besteht die Abwärtskompatibilität von ECMAScript 5. Für alten, bestehenden Code ändert sich nichts, aber neuer Code kann von den Vorteilen des Strict Modes profitieren.
Der geplante radikale Umbau der Sprache war nur aufgeschoben, nicht aufgehoben. Unter dem Codenamen »Harmony« wurde an einer umfassenden Erweiterung ECMAScripts gearbeitet.
Im Jahr 2015 wurde schließlich ECMAScript 6 verabschiedet. Seitdem wird jährlich eine neue ECMAScript-Edition veröffentlicht. Daher trägt die Sprache nun neben der Ausgabennummer auch die Jahresnummer. Der volle Titel lautet daher ECMAScript 2015, Edition 6.
ECMAScript 6 führt verschiedene Sprachfähigkeiten ein, die eine neue Syntax verwenden. Dadurch ist ECMAScript 6 nicht mehr abwärtskompatibel. Ein Browser, der nur ECMAScript 5 beherrscht, kann Scripte mit ECMAScript-6-Techniken nicht verarbeiten.
Zu den wichtigsten Neuerungen von ECMAScript 6 gehören deklarative Klassen und ein Modulsystem. Wir werden Klassen in einem späteren Kapitel kennenlernen. Das Modulsystem ermöglicht es, mehrere JavaScript-Dateien gezielt miteinander zu verbinden. Dadurch kann eine JavaScript-Datei die Objekte einer anderen Datei verwenden. Dies war zwar schon vorher möglich, aber solche Abhängigkeiten konnten nicht direkt in JavaScript ausgedrückt werden.