-
Notifications
You must be signed in to change notification settings - Fork 17
/
standards.html
105 lines (100 loc) · 13.8 KB
/
standards.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>JavaScript: Entstehung und Standardisierung</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="js-doku.css">
</head>
<body>
<div id="nav">
<p>Hier entsteht eine <strong>JavaScript-Dokumentation</strong> von <a href="https://molily.de/">molily</a>. Derzeit ist sie noch lückenhaft, wächst aber nach und nach. Kommentare und Feedback werden gerne per <a href="mailto:[email protected]">E-Mail</a> entgegen genommen.</p>
<p class="contents-link"><a href="./">Zum Inhaltsverzeichnis</a></p>
</div>
<h1>JavaScript: Entstehung und Standardisierung</h1>
<div class="section" id="standardisierung">
<h2>Wer legt fest, was JavaScript ist?</h2>
<p>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.</p>
<p>Neben dem klar umrissenen Sprachkern gibt es eine Fülle von Techniken, die über JavaScript nutzbar sind. Man spricht von sogenannten <strong>APIs</strong> (engl. <em>application programming interface</em> – Programmierschnittstellen). Die Weiterentwicklung von JavaScript besteht zum großen Teil darin, dass neue APIs erfunden und durch die Browser implementiert (umgesetzt, unterstützt) werden.</p>
<p>»JavaScript« ist demnach ein offener Begriff, der jegliches Scripting auf Basis von <a href="#ecmascrpt">ECMAScript</a> zusammenfasst. Dass man heute vereinfachend von »JavaScript« spricht, hat historische Gründe. JavaScript ist ein Mischmasch unterschiedlicher, nicht aufeinander abgestimmter Techniken.</p>
</div>
<div class="section" id="netscape-microsoft">
<h2>Anfangszeit mit Netscape JavaScript und Microsoft JScript</h2>
<p>Der Name <strong>JavaScript</strong> 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 <em>Netscape Navigator</em> unterstützte.</p>
<p>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 <strong>JScript</strong>. Der eigene Name ging mit eigenen Zusätzen und Besonderheiten einher, wodurch sich Netscapes JavaScript und Microsofts JScript auseinander entwickelten.</p>
<p>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.</p>
</div>
<div class="section" id="ecmascript">
<h2>ECMAScript standardisiert die Sprachgrundlagen</h2>
<p>Die Grundlagen von JavaScript wurden in <strong>ECMAScript</strong> festgelegt. ECMA ist eine Standardisierungsorganisation, die die technische Spezifikation herausgibt. Maßgeblich ist derzeit die <strong>achte Ausgabe</strong> aus dem Jahr 2017 (ECMAScript 2017, Edition 8).</p>
<p>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.</p>
<p>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 <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">die offizielle Spezifikation dennoch lesen</a>.</p>
</div>
<div class="section" id="dom">
<h2>Das DOM standardisiert den Dokumentzugriff</h2>
<p>Auf der anderen Seite war eine Standardisierung des Zugriffs auf das HTML-Dokument nötig. Sowohl Netscape als auch Microsoft erfanden eigene <strong>DHTML-Modelle</strong>. DHTML steht dabei für <em>dynamisches</em> HTML. Beide Modelle waren jedoch beschränkt, undurchdacht und zu allem Überfluss nicht zueinander kompatibel.</p>
<p>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 <strong>Document Object Model (DOM)</strong> erarbeitet. Heute werden Teile des DOMs durch eine weitere Standardisierungsgruppe gepflegt, die Web Hypertext Application Technology Working Group (WHATWG).</p>
<div class="section" id="dom-standards">
<h3>Überblick über die DOM-Standards</h3>
<p>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.</p>
<ul>
<li>Das <strong>Kern-DOM</strong> beschreibt ein Objektmodell, das auf Dokumente von Auszeichnungssprachen wie HTML und XML anwendbar ist. Das DOM bezieht sich also nicht ausschließlich auf HTML-Dokumente.</li>
<li>Das <strong>HTML-DOM</strong> regelt Besonderheiten und Vereinfachungen beim Zugriff auf HTML-Dokumente.</li>
</ul>
<p>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.</p>
<p>Es noch weitere DOM-Spezifikationen, von denen für die JavaScript-Programmierung vor allem zwei interessant sind:</p>
<ul>
<li><strong>DOM Events</strong> beschreibt die Verarbeitung von Ereignissen (z.B. Benutzereingaben) im Dokument. (Siehe <a href="einbindung.html">Ereignis-Verarbeitung</a>.)</li>
<li>Das <strong>CSS Object Model</strong> (CSSOM) ermöglicht den Zugriff auf die Darstellung des Dokuments. Darüber können CSS-Eigenschaften sowie zentrale Stylesheet-Regeln gelesen und verändert werden. (Siehe <a href="css.html">Darstellung von Dokumenten steuern</a>.)</li>
</ul>
<p>Die tatsächlichen Spezifikationen sind:</p>
<ul>
<li><a href="https://dom.spec.whatwg.org/">Der WHATWG-DOM-Spezifikation definiert den Kern und Ereignis-Verarbeitung</a></li>
<li><a href="https://html.spec.whatwg.org/multipage/">Die WHATWG-HTML-Spezifikation definiert das HTML-DOM</a></li>
<li><a href="https://www.w3.org/TR/cssom-1/">W3C-Spezifikation des CSSOM</a></li>
</ul>
</div>
</div>
<div class="section" id="html5">
<h2>HTML 5 integriert verschiedene Standards</h2>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p>Das Hauptanliegen von HTML 5 war es, verbreitete und bewährte JavaScript-Techniken erstmals zu standardisieren. <em lang="en">Paving the cowpaths</em>, 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 <code>window</code>.</p>
</div>
<div class="section" id="ecmascript-5">
<h2>ECMAScript 5 macht die JavaScript-Programmierung robuster</h2>
<p>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.</p>
<p>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.</p>
<p><strong>ECMAScript 5</strong> 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.</p>
<p>Die wichtigste Neuerung ist der <strong>Strict Mode</strong>. 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.</p>
<p>Der Strict Mode lässt sich im JavaScript-Code mittels <code>'use strict';</code> 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.</p>
</div>
<div class="section" id="ecmascript-6">
<h2>ECMAScript 6 macht einen großen Schritt vorwärts</h2>
<p>Der geplante radikale Umbau der Sprache war nur aufgeschoben, nicht aufgehoben. Unter dem Codenamen »Harmony« wurde an einer umfassenden Erweiterung ECMAScripts gearbeitet.</p>
<p>Im Jahr 2015 wurde schließlich <strong>ECMAScript 6</strong> 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.</p>
<p>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.</p>
<p>Zu den wichtigsten Neuerungen von ECMAScript 6 gehören deklarative Klassen und ein Modulsystem. Wir werden Klassen <a href="organisation-instanzen.html">in einem späteren Kapitel</a> 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.</p>
</div>
<div class="references">
<h3>Weiterführende Lektüre</h3>
<ul>
<li><a href="http://webkrauts.de/artikel/2015/eine-kurze-geschichte-von-javascript">JavaScript feiert den 20-jährigen Geburtstag: Eine kurze Geschichte von JavaScript</a></li>
</ul>
</div>
<div class="sequence-navigation">
<p class="next"><a href="einsatz.html" rel="next">Sinnvoller JavaScript-Einsatz</a></p>
<p class="prev"><a href="konzepte.html" rel="prev">Grundlegende Konzepte</a></p>
</div>
<div id="footer">
<p><strong>JavaScript-Dokumentation</strong> · <a href="./">Zum Inhaltsverzeichnis</a></p>
<p>Autor: <a href="https://molily.de/">molily</a> · Kontakt: <a href="mailto:[email protected]">[email protected]</a></p>
<p>Lizenz: <a rel="license" href="https://creativecommons.org/licenses/by-sa/3.0/de/">Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0</a></p>
<p><a href="https://github.com/molily/javascript-einfuehrung">JavaScript-Einführung auf Github</a></p>
<p>Kostenloses Online-Buch und E-Book:<br><a href="https://testing-angular.com" lang="en" hreflang="en">Testing Angular – A Guide to Robust Angular Applications</a> (englisch)</p>
</div>
<script src="js-doku.js"></script>
</body>
</html>