Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Mit diesem Buch gelingt Ihnen der einfache Einstieg ohne Vorkenntnisse in JavaScript.
Alle Grundlagen der Programmierung mit JavaScript werden in 14 Kapiteln kompakt und leicht verständlich erläutert: von den grundlegenden Programmiertechniken wie Variablen und Funktionen über objektorientierte Programmierung bis hin zur Entwicklung dynamischer Webseiten mit modernem JavaScript.
Hierbei werden auch fortgeschrittene Themen wie das Document Object Model (DOM), Event Handling, synchrone und asynchrone Verarbeitung, die REST-API sowie das Speichern von Daten in Cookies und Web Storage behandelt.
Zahlreiche Codebeispiele und Übungsaufgaben mit Lösungen zum Download helfen Ihnen, das neu gewonnene Wissen anzuwenden und zu vertiefen. So sind Sie perfekt auf den Einsatz von JavaScript und die Programmierung interaktiver Webseiten in der Praxis vorbereitet.
Solide Grundkenntnisse in HTML und CSS werden vorausgesetzt.
Aus dem Inhalt:
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 196
Veröffentlichungsjahr: 2024
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
Ulrike Häßler
JavaScript
Schnelleinstieg
Dynamische Webseitenprogrammieren in 14 Tagen
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über https://portal.dnb.de/opac.htm abrufbar.
ISBN 978-3-7475-0780-3
1. Auflage 2024
www.mitp.de
E-Mail: [email protected]
Telefon: +49 7953 / 7189 - 079
Telefax: +49 7953 / 7189 - 082
© 2024 mitp Verlags GmbH & Co. KG, Frechen
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Dieses E-Book verwendet das EPUB-Format und ist optimiert für die Nutzung mit Apple Books auf dem iPad von Apple. Bei der Verwendung von anderen Readern kann es zu Darstellungsproblemen kommen.
Der Verlag räumt Ihnen mit dem Kauf des E-Books das Recht ein, die Inhalte im Rahmen des geltenden Urheberrechts zu nutzen. Dieses Werk, einschließlich aller seiner Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Dies gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen.
Der Verlag schützt seine E-Books vor Missbrauch des Urheberrechts durch ein digitales Rechtemanagement. Bei Kauf im Webshop des Verlages werden die E-Books mit einem nicht sichtbaren digitalen Wasserzeichen individuell pro Nutzer signiert. Bei Kauf in anderen E-Book-Webshops erfolgt die Signatur durch die Shopbetreiber. Angaben zu diesem DRM finden Sie auf den Seiten der jeweiligen Anbieter.
Lektorat: Janina Vervost
Sprachkorrektorat: Jürgen Benvenuti
Covergestaltung: Janina Vervost, Christian Kalkert
Covergrafik & Icons: Tanja Wehr, sketchnotelovers
Satz: Petra Kleinwegen
electronic publication: CPI books GmbH, Leck
Einleitung
Programmieren lernen in 14 Tagen
Der Sandkasten – Programmbeispiele zum Download
Fragen und Feedback
Vorwort
Sofort ins kalte Wasser – ein fremdes Skript lesen und verstehen
Das aufgeschobene Vorwort
JavaScript-Versionen und Browser-Versionen
Vorbereitungen und Werkzeuge
1.1 HTML und CSS
1.2 JavaScript einbinden
1.3 JavaScript laden
1.4 Mein Freund, der Editor
1.5 Die Browser-Konsole – die Sprechstundenhilfe
1.6 Praktische Konsolen-Befehle
Variablen und Syntax
2.1 Variablen
2.2 Syntax – die »Grammatik« von JavaScript
Grundlegende Datentypen
3.1 Primitive (einfache) Datentypen
3.2 Zahlen – Number
3.3 Boolean – Wahrheitswerte
3.4 Strings – Zeichenketten
3.5 undefined, null und empty
3.6 Datentyp-Konvertierungen
Zusammengesetzte Datentypen
4.1 Objekte
4.2 Das Objekt Math
4.3 Übungen: Math
4.4 Mathematische Operatoren
4.5 Übung: Modulo
4.6 String-Eigenschaften und -Methoden
4.7 Übung: Strings ersetzen
4.8 Weitere String-Methoden
4.9 Übung: Zeichenkette extrahieren
4.10 Reguläre Ausdrücke
Programme steuern – Ablaufkontrolle
5.1 Abfragen und Schleifen
5.2 if-then-else
5.3 switch
5.4 Übung: Stundenplan mit switch/case
5.5 for-Schleifen
5.6 while-Schleifen
5.7 Übung: Zahlen von 1 bis 100 ausgeben
5.8 Logische Operatoren
5.9 Ternary-Operator
5.10 Übung: if-Anweisungen kürzen
5.11 Implizite Typ-Konvertierung in Abfragen
Funktionen
6.1 Funktionen erzeugen und aufrufen
6.2 Globaler Gültigkeitsbereich (Scope)
6.3 Übung: Globaler Scope, Block-Scope und Funktions-Scope
6.4 Funktionsausdrücke (Function Expressions)
6.5 Arrow-Funktionen
6.6 Debugging
6.7 Übungen: Funktionen
Objekte
7.1 Grundlagen
7.2 for-in-Schleife für Objekte
7.3 Das Objekt »document«
7.4 Konstruktor-Funktionen
7.5 Klassen
7.6 Datum und Zeit
7.7 Übung: Date und Time
Arrays
8.1 Arrays – Sammlungen unter einem Variablennamen
8.2 Array-Methoden
8.3 Arrays sortieren
8.4 Arrays verschachteln und zusammenfügen
8.5 Arrays durchlaufen
8.6 Array-Methoden höherer Ordnung: Callbacks
8.7 Übungen: array.filter()
8.8 Sparse Arrays – Arrays mit Lücken
JSON – JavaScript Object Notation
9.1 JSON-Objekte und JSON-Arrays
9.2 JSON-Objekte in Strings umwandeln und umgekehrt
9.3 Übung: Objekte/JSON
Document Object Model
10.1 DOM – das Document Object Model
10.2 Zugriff auf die DOM-Elemente
10.3 DOM-Methoden und -Eigenschaften
10.4 Zugriff mit CSS-Selektoren – querySelector() und querySelectorAll()
10.5 DOM-Navigation
10.6 Zugriff auf Inhalte mit innerHTML, innerText und TextContent
10.7 Elemente ins DOM einfügen
10.8 Übung: Elemente im DOM einbinden
10.9 Praxisbeispiel – komplexe Strukturen einfügen
10.10 Übung: Bild in das Fragment setzen
10.11 DOM-Elemente erzeugen und platzieren
10.12 Elemente ersetzen und entfernen
10.13 Übung: Elemente entfernen
10.14 CSS-Stile und -Klassen ändern
Ereignisse – Events
11.1 Event Handling – Ereignisse erkennen
11.2 Eigenschaften und Methoden der Maus-Events
11.3 Übung: Mauszeiger verfolgen
11.4 Tastatur-Events
11.5 Übung: Tastatur-Ereignisse
11.6 Vorbestimmte Verhalten verhindern – event.preventDefault()
11.7 Übung: Formulare prüfen
11.8 Event Delegation – ein Event Handler für viele Elemente
11.9 Ereignisse des Window-Objekts
Formulare prüfen und Daten versenden
12.1 input – Eingaben in Formularfelder
12.2 Formulardaten versenden
12.3 Datum und Dauer – Formulareingaben
Asynchrones JavaScript
13.1 Zeitgesteuerte Anwendungen
13.2 AJAX – XMLHTTPRequest – Kommunikation mit dem Server
13.3 Das Fetch-API – GET – Daten abholen
13.4 Übung: showProduct(option)
13.5 Fetch Async/Await – warten auf die Antwort
Window, Cookies und die Web-APIs
14.1 Grundsätzliches zum Window-Objekt
14.2 Das Window-Objekt und das Navigator-Objekt
14.3 IntersectionObserver – Überwachung des sichtbaren Bereichs der Webseite
14.4 Web Animations API
14.5 Cookies – Gedächtnis für Webseiten
14.6 Übung: Cookies für Leaflet-Kartenposition
14.7 Web Storage – Speicher im Browser
14.8 Übung: Local Storage
Anhang
Glossar
Error – Fehlermeldungen
Keywords (Schlüsselwörter)
Quellen
Bildnachweis
Mit diesem Buch haben Sie sich für einen einfachen, praktischen und fundierten Einstieg in JavaScript entschieden. Sie lernen ohne unnötigen Ballast alles, was SIE wissen müssen, um JavaScript effektiv für Projekte in Ihrem Berufs- und Interessensgebiet einzusetzen. Alles, was Sie dafür benötigen, sind grundlegende Kenntnisse in HTML und CSS.
Wenn Sie Zeit genug haben, können Sie jeden Tag ein neues Kapitel durcharbeiten und so innerhalb von zwei Wochen Programmieren lernen. Am besten lesen Sie das Buch neben der Computer-Tastatur und probieren die Programmbeispiele und Übungen gleich aus. Sie werden schnell erste Erfolge erzielen und Freude an der Programmierung mit JavaScript finden.
Sie müssen die Beispiele in diesem Buch nicht abtippen. Der Code der Beispiele und zu den Übungen steht Ihnen auf der Webseite des Verlags unter www.mitp.de/0778 zur Verfügung.
Fast immer liegen die Beispiel-Lösungen in einer externen JavaScript-Datei, sodass Sie die Wahl haben, sich eine eigene Lösung zu erarbeiten oder den Lösungsweg zu studieren.
Unsere Verlagsprodukte werden mit großer Sorgfalt erstellt. Sollten Sie trotzdem einen Fehler bemerken oder eine andere Anmerkung zum Buch haben, freuen wir uns über eine direkte Rückmeldung an [email protected].
Falls es zu diesem Buch bereits eine Errata-Liste gibt, finden Sie diese unter www.mitp.de/0778 im Reiter DOWNLOADS.
Wir wünschen Ihnen viel Erfolg und Spaß bei der Programmierung mit JavaScript!
Die ersten Gehversuche mit JavaScript starten die meisten Webdesigner mit einem fertigen Skript, das sie z.B. auf GitHub finden und vielleicht in einzelnen Anweisungen nach ihrer Vorstellung ändern.
Für den ersten Schritt in die Programmierung mit JavaScript reicht eine normale Webseite. Das script-Element am Ende des Dokuments (vor dem schließenden body-Tag) braucht keinerlei Attribute. Innerhalb der öffnenden und schließenden script-Tags wirken JavaScript-Anweisungen nur auf dieser Seite.
HTML:
Der Aufruf document.querySelector ist das JavaScript-Äquivalent zum CSS-Selektor. In den runden Klammern des Aufrufs kann ein beliebiger CSS-Selektor stehen. In diesem Beispiel ist es ein HTML-Tag-Selektor. Nach den schließenden runden Klammer erzeugt .style ein style-Attribut im öffnenden body-Tag und "color: green" ist eine ganz normale CSS-Regel.
document.querySelector ist sozusagen das JavaScript-Äquivalent eines CSS-Selektors und erreicht die Elemente über einen CSS-Selektor. Nach demselben Muster würde ein CSS-class-Selektor in den runden Klammern wirken. Schreiben Sie ".hallo" in die runden Klammern und wählen Sie eine andere CSS-Regel, z.B. die Schriftgröße und die Hintergrundfarbe, um gezielt den Text im p-Element mit der Klasse hallo zu stylen.
Der CSS-Selektor wird mit demselben Punkt vor dem Klassennamen angesprochen wie in der CSS-Datei, das Semikolon trennt die beiden Regeln voneinander.
In den frühen Zeiten des Internets gab es nur statische Seiten auf der Basis von HTML. Erst CSS, JavaScript und PHP haben das Internet populär gemacht. In den Anfängen brachte JavaScript Effekte und kleine Animationen für die Webseite und übernahm dann mehr die Rolle des Vermittlers zwischen der Anwendung auf dem Server und dem Benutzer. Heute gestaltet JavaScript nicht nur Webseiten, sondern sitzt auch hinter PDF-Dateien und in Photoshop, in den Anwendungen für mobile Geräte und ist der Kern von Node.js, einem weiteren Webserver neben Apache.
Dieses Buch konzentriert sich auf die Grundlagen von JavaScript für Webseiten, auf praktische Anwendungen von einfachen Effekten bis hin zur Prüfung und Übermittlung von Formulardaten.
Der erste Teil widmet sich den einfachen Vokabeln und der Grammatik von JavaScript: Datentypen wie Zahlen und Zeichenketten, Objekten und Arrays, Kontrollstrukturen und Funktionen.
Der zweite Teil dreht sich um die Anwendung dieser Grundlagen in Webseiten: Wie ändert man Inhalte, erkennt Ereignisse wie einen Mausklick, erzeugt HTML-Elemente on the fly und weist ihnen CSS zu?
Die Reaktion auf Aktionen des Benutzers eröffnet schließlich den Weg in die Kommunikation mit dem Server: Wie funktioniert die Übergabe der Benutzereingaben aus dem Formular an die Anwendung auf dem Server?
Programmiersprachen haben viel mit natürlichen Sprachen gemeinsam: Sie haben Vokabeln und eine Grammatik – ihre Syntax. So wie man eine natürliche Sprache nicht allein aus dem Lehrbuch lernt, brauchen die Vokabeln der Programmiersprache und ihre Anwendung praktische Übung. Es dauert, bis Sie eine Diskussion in italienischer Sprache führen können, aber für den Anfang ist es super, wenn wir den Fremdenführer gut verstehen. Das Verständnis für ein fremdes Skript ist ein großer Schritt, um eigene Programme zu entwickeln.
Bis Sie als Einsteiger den ersten Algorithmus für eine Aufgabe formulieren können, passiert dasselbe wie bei den ersten Sätzen einer frisch erlernten Sprache: Da stottert man schon mal, aber mit jedem Gespräch wird es flüssiger.
Bei den Grundlagen von JavaScript stellen sich Einsteiger die Frage: »Was mache ich mit dieser ganzen Theorie überhaupt?«. Dabei geht es weder um Vollständigkeit noch um technische Akkuratesse, sondern um das Verständnis für die Konzepte. Erst wenn es nach der Vorstellung von einfachen Datentypen, Arrays, Objekten und Funktionen an das Ändern des HTML-Dokuments (das Document Object Model) geht, offenbaren sich viele Konzepte von JavaScript. Das vorliegende Buch greift darum an vielen Stellen zwei Schritte vor und verweist andererseits aus den Kapiteln zur Anwendung von JavaScript in Webseiten zurück auf die Grundlagen. Keine Sorge: Der praktische Umgang wirft ein neues Licht auf die Konzepte und bringt das tiefe Verständnis.
JavaScript wurde 1995 von Netscape entwickelt und von Microsoft als JScript adaptiert. Ein Standard wurde aber erst durch die ECMA (European Computer Manufacturers Association) erreicht.
Die Grundlagen von JavaScript werden von der ECMA standardisiert, das W3C steuert alles rund um das Document Object Model zu, also den Teil von JavaScript, der sich speziell auf Webseiten bezieht. Auf jeden Fall aber werden JavaScript-Versionen als ECMAScript veröffentlicht. ECMAScript 6 war ein großer Sprung im Jahr 2015 und ist eine stabile Version für alle modernen Browser. Heute nutzt die ECMA Jahreszahlen anstelle von Versionsnummern und beschert uns jedes Jahr mit einer neuen Versionsnummer.
Das läuft nicht anders als bei neuen Elementen in HTML oder neuen Eigenschaften für CSS: Bis neue Versionen für die Programmierung von Webseiten genutzt werden können, muss sicher sein, dass die Browser die Neuheiten auf einer breiten Basis unterstützen. Darum gilt die Version 6 von JavaScript bis heute als Eckpfeiler für Online-Anwendungen.
Das Erscheinen einer neuen Version bedeutet natürlich nicht, dass alle Browser direkt auf den Zug aufspringen. Als Entwickler fiebert man dem einen oder anderen lang ersehnten Feature entgegen, aber wir können es in der Regel erst nutzen, wenn die Mainstream-Browser die neuen Funktionen in ihre Versionen eingebaut haben und der größte Teil der potenziellen Benutzer wiederum auf die aktuellen Versionen der Browser umgestiegen ist.
Es ist nicht wichtig, ob Sie bereits PHP, TypeScript oder Java programmiert haben: Ohne solide Kenntnis und Erfahrung mit HTML und CSS ist der Einstieg in JavaScript steil und steinig. Schließlich ist ein Hauptgrund für den Einsatz von JavaScript der Eingriff in die Darstellung der Webseite. Valides – also korrektes – HTML ist die Basis für JavaScript. Obwohl die Browser viele HTML-Fehler ignorieren, schlagen falsch verschachteltes HTML und fehlende Hochkommas im HTML-Tag zurück. Darum gehört der Validator zum Alltag des JavaScript-Programmierers.
Abb. 1.1:https://validator.w3.org – Prüfen, ob die HTML-Struktur stimmt
Wie gut Sie sich mit CSS auskennen sollten, hängt davon ab, auf welche Einsatzgebiete von JavaScript Sie sich in erster Linie vorbereiten:
Animationen und Effekte
Design und Layout von Webseiten
Kommunikation mit dem Server
Wenn Sie JavaScript einsetzen wollen, um die Grenzen von CSS-Animationen zu überschreiten – etwa Animationen starten, wenn sie im Browserfenster sichtbar werden –, sind gute Kenntnisse in CSS-Animationen gefragt.
Bei Änderungen am Design von Content-Management-Systemen wie WordPress, Joomla oder Drupal kann das CSS anspruchsvoll sein. Dort sitzen auf einem einzelnen Element gut ein Dutzend CSS-Eigenschaften aus unterschiedlichen Quellen.
Konzepte wie Cascading (das Einfließen von Stilen aus vorangegangenen CSS-Regeln) und CSS-Selektoren brauchen ein tiefes Verständnis. Ein section-Element einer Seite beherbergt oft ein gutes Dutzend Stile aus verschiedenen Quellen:
Abb. 1.2: Der Erste-Hilfe-Koffer für den Einblick ins CSS ist die Browser-Konsole.
Die Kommunikation mit Anwendungen auf dem Server ist ein weiteres Einsatzgebiet von JavaScript. Das Einlesen und Weiterreichen von Benutzereingaben kommt mit einfachen Eingriffen in die Darstellung im Browser aus. Hier reichen solide Grundlagen von CSS.
Zur Programmierung mit Sprachen wie Java oder C gehört die Formatierung der Ausgabe. Die Benutzerschnittstelle einer Desktop-Anwendung ist ein Monster von Menüs und Programmfenstern sowie die Reaktion auf Benutzereingaben und auf Nachrichten vom Betriebssystem. In JavaScript übernehmen HTML und CSS die Formatierung der Benutzerschnittstelle vollständig. Selbst wenn die Kenntnis von HTML und CSS nur oberflächlich ist, haben Sie damit schon einen großen Teil des Weges zur Programmierung von Webseiten »im Kasten«.
JavaScript braucht keinen Webserver für die Ausführung, sondern läuft in einem beliebigen Ordner auf dem eigenen Rechner. Ein Texteditor und ein Browser, das ist schon alles, was für die ersten Schritte mit JavaScript erforderlich ist.
Dem Editor (besser »Programmeditor«) ist ein eigener Abschnitt gewidmet, aber für die ersten Schritte reichen etwa TextEdit auf dem Mac, Notepad unter Windows oder nano unter Unix. Wichtig ist, dass der Editor keine Formatierung einbringt – keine Buttons für fette oder kursive Schrift, keine Schriftgrößen oder -farben.
Die Vorbereitungen für die ersten Schritte mit JavaScript beschränken sich also auf das Anlegen eines Ordners – der Sandbox. Der Name des Ordners ist nicht relevant – meine-webseite, sandbox oder klara. JavaScript wird im Browser ausgeführt, für die Formatierung der Ausgabe sorgen HTML und CSS. Das macht den Einstieg in JavaScript einfacher als das Erlernen anderer Programmiersprachen.
Im ersten Teil dieses Buchs ist die HTML-Datei nur ein Grundgerüst aus head und body.
HTML:
Die Datei index.html öffnet sich durch einen Doppelklick im Browser, aber Änderungen nach dem Öffnen der Seite zeigt der Browser erst an, wenn die Seite neu geladen wird. Darum empfiehlt Abschnitt 1.4 Programmeditoren mit einem Live-Server. Doch zunächst erst einmal zum Einbinden von JavaScript in Webseiten.
JavaScript-Anweisungen können mit dem HTML-script-Tag direkt in das HTML-Dokument gesetzt oder als Datei mit der Namenserweiterung .js in eine gesonderte Datei geschrieben werden. Das script-Tag bindet die externe JavaScript-Datei mit einem src-Attribut ein.
Das script-Element kann an beliebiger Stelle eines HTML-Dokuments stehen: im Seitenkopf oder innerhalb der öffnenden und schließenden body-Tags. Die empfohlene Arbeitsweise ist eine Skript-Datei mit der Dateierweiterung .js und dem defer-Attribut nach dem Laden der CSS-Dateien im Kopf der HTML-Datei.
HTML:
Viele Content-Management-Systeme binden das JavaScript noch vor dem schließenden body-Tag ein. Ein defer-Attribut wird dann nicht gebraucht.
Am Ende können Sie kleine Skripte auch direkt vor dem schließenden body-Tag einsetzen.
Im Allgemeinen ist es nicht empfehlenswert, die Skript-Anweisungen direkt ins HTML zu setzen. Aber wenn das Programm nur wenige Zeilen enthält und nur auf einer Seite gebraucht wird, spricht nichts dagegen.
Mit ECMAScript 6 ist eine weitere Methode zum Einbinden von Skript-Dateien angekommen, die heute von allen modernen Browsern unterstützt wird: JavaScript-Module. Wenn Sie Skripte von Dritten einbinden, wird ihnen diese Option früher oder später begegnen.
Module organisieren Skript-Dateien, indem sie Anwendungen in überschaubarere Teile herunterbrechen und sie in separaten Dateien speichern. Das »Hauptprogramm« holt diese Fragmente in das Skript zurück: Sie werden als Module importiert.
Das type-Attribut des script-Elements kennzeichnet JavaScript-Dateien als module. Sowohl Skript-Dateien, die Module importieren, als auch Skripte, die Elemente exportieren, müssen als type="module" notiert werden.
Code, der in der Anwendung nur stören würde, wird in ein Modul exportiert – z.B. tools.js. Die zentrale Skript-Datei importiert die Module, die tatsächlich gebraucht werden.
Im Rahmen dieses Buchs bleiben wir beim klassischen Einbinden von JavaScript-Dateien mit dem script-Tag.
Der Browser liest das HTML-Dokument Zeile für Zeile von oben nach unten und beginnt bereits mit der Darstellung der Seite, bevor er das Dokument vollständig geladen hat. Bei einer externen Skript-Datei stoppt der Browser, bis die Datei heruntergeladen ist. Das kann zu einer spürbaren Latenz der Anzeige führen. Große Skript-Dateien im Seitenkopf führen zu einer Verzögerung im Aufbau des Dokuments, dem »Rendern«.
Abb. 1.3: Der »Wasserfall« stellt das Laden der Elemente der Webseite als Grafik dar.
Skripte wurden bis vor wenigen Jahren häufig am Ende des Dokuments vor dem schließenden body-Tag geladen, um ohne großen Aufwand sicherzustellen, dass alle Ressourcen (Bilder, CSS-Dateien …) bereits geladen sind. Heute hat das script-Tag zwei Attribute: defer oder async. Sie verhindern den Zwischenhalt, aber laden die Skript-Datei »just in time«.
Mit defer und async können Sie Skript-Dateien im head-Element des Dokuments einbinden und sicherstellen, dass der Browser sie in der richtigen Reihenfolge lädt, ohne den Seitenaufbau zu unterbrechen.
script1.js lädt ein Bild, script2.js wendet einen Filter auf das Bild an. Sitzen die Skript-Tags im Kopf der Seite, erzeugen sie beide Fehler: script1.js kennt das HTML-Element für die Platzierung des Bilds nicht, script2.js kann den Filter nicht auf das Bild anwenden.
Mit defer wird das Bild zwar geladen und eingesetzt, aber dieser Prozess dauert an, während der Browser script2.js schon ausführt. Zum Zeitpunkt der Ausführung von script2.js ist das Bild noch nicht geladen. Dieselbe Situation tritt ein, wenn script1.js als async markiert wäre.
Der Browser lädt Skripte mit einem defer-Attribut in der Reihenfolge, in der sie im Code erscheinen. Dabei wird der Browser nicht blockiert, er führt diese Skripte aber erst aus, wenn das Dokument vollständig geladen ist.
Skripte mit einem async-Attribut werden ebenfalls ohne eine Blockade ausgeführt, aber ohne Beachtung der Reihenfolge. Das kann dazu führen, dass script2.js vor script1.js geladen und ausgeführt wird. Wenn es nicht auf die Reihenfolge beim Laden der Skripte ankommt, wäre async die praktikable Lösung.
Sie können jeden Texteditor benutzen, aber gute Programmeditoren sind schon für HTML und CSS unersetzlich, für JavaScript gilt dies umso mehr. Die Anforderungen sind:
Syntax-Highlighting – der Editor macht die Grammatik der Programmiersprache durch unterschiedliche Farben sichtbar.
Einrücken – bringt die hierarchische Struktur von Code-Blöcken sauber zum Vorschein und erleichtert die Fehlersuche.
Code Folding (Blöcke zusammenfalten) – verbirgt Code-Segmente, die aktuell nicht gebraucht werden.
Code Completing – zeigt nach wenigen Buchstaben Hinweise auf Befehle, Anweisungen und Methoden.
Automatisches Klammern – setzt direkt doppelte Hochkommas, runde, eckige und geschweifte Klammern und positioniert den Cursor in die Klammer.
SplitView oder SplitScreen – zeigt ein Dokument in einem geteilten Fenster, um einen gleichzeitigen Einblick in lange Codeseiten zu bieten.
Der beste Editor ist der, den man durch und durch kennt. Tatsächlich finden Sie heute viele hervorragende kostenlose Code-Editoren im Netz.
Abb. 1.4: Screenshot: Visual Studio Code – empfohlene Erweiterung: Live Server
Visual Studio Code (VSC) von Microsoft ist der Industriestandard und läuft »auf ’nem Bierdeckel« (charmante Umschreibung für »unter jedem Betriebssystem«). Anforderungen wie
Syntax-Highlighting,
das Zusammenklappen von Anweisungsblöcken,
Auto-Vervollständigen
erfüllen die meisten Programmeditoren aus dem Effeff, aber Visual Studio Code kann mehr. Für die JavaScript-Entwicklung ist eine Live-Server-Umgebung unbezahlbar. Ein Live-Server ist eine Anwendung im Code-Editor, die sich zum Webserver aufspannt. Sie sehen den Effekt von Änderungen nach dem Speichern, ohne die Seite im Browser durch ein Refresh neu zu laden. Für Visual Studio Code (VSC) gibt es diese Funktion als Erweiterung.
BBEdit läuft nur unter macOS und kostet etwa 50 €, aber hat den Live-Server schon an Bord, ebenso Syntax-Highlighting, Code Folding, Code Completing, automatische Klammern und SplitView. Ohne eine Erweiterung oder ein Plug-in lädt BBEdit Dateien ohne FTP/SFTP-Programm direkt vom Webserver und beim Speichern wieder zurück auf den Webspace.
Eine IDE (Integrated Development Environment) ist eine ganze Suite mit Entwicklerwerkzeugen, die mehrere Programmiersprachen unterstützt und häufig von großen Teams genutzt wird. Meist macht die Konfiguration viel Arbeit und überfordert Einsteiger schnell ohne jeglichen Mehrwert. Beispiele für IDEs sind PhpStorm und Xcode für macOS.
Moderne Browser sind die Grundlage für das Design und Layout von Webseiten mit HTML und CSS. Selbst heute, da sich die Browser nach den Zwistigkeiten der Frühzeit einander angenähert haben, reicht der bevorzugte Browser nicht, um alle JavaScript-Programme ausreichend zu testen. Kleine Abweichungen gibt es immer noch, und am besten versorgen Sie sich mit allen Browsern, die auf dem eigenen System verfügbar sind. Auch ältere Version der Browser sollten in der Sammlung nicht fehlen.
Der Blick auf den Desktop-Monitor reicht nicht. Mobile Geräte für Android und iOS werden im Laufe der Entwicklung zu einer unverzichtbaren Ergänzung beim Testen Ihrer Anwendungen. Während es für macOS Simulatoren sowohl für iOS-Geräte als auch für Android gibt, bleibt PC- und Unix-Benutzern die Sicht auf iOS verwehrt, wenn sich keine hilfreiche Freundin mit einem iPhone findet.
Abb. 1.5: Android-Simulator
Abb. 1.6: iOS-Simulator
Die Installation der Simulatoren ist kein »Klick mich, hier bin ich«, aber der Aufwand der Installation lohnt sich. Die Darstellung der Simulatoren ist exakter, beim Testen sind sie schneller bei der Hand als eine Sammlung mobiler Geräte.
Apple hat den Simulator für mobile Geräte von der Apple Watch bis zum iPad in die Entwicklungsumgebung Xcode unter Developer > Tools/Simulator eingebettet. Apple-Nutzer können Xcode kostenlos im App Store laden.
Für Android-Geräte stellt Google Android Studio auf https://developer.android.com/studio für Windows und macOS zur Verfügung.
Das wichtigste Werkzeug der Browser wiederum ist ihre Browser-Konsole, die sich hinter den Entwicklerwerkzeugen verbirgt. Die Konsole zeigt Fehler an, hilft bei der Suche nach Logikfehlern und ist die erste Wahl, um eine Anweisung ohne großen Aufwand zu testen.
Alle Browser – von Chrome über Edge und Firefox bis zu Safari – haben eine Konsole, aber der Zugriff auf die Konsole ist bei jedem Browser unterschiedlich.
Der Apple-Browser eröffnet den Weg zur Browser-Konsole erst, wenn unter den Safari-Einstellungen die Entwicklerwerkzeuge aktiviert werden.
Abb. 1.7: Safari (macOS): Einstellungen – Erweitert – Menü »Entwickler« in der Menüleiste anzeigen
Von da an sitzt der Punkt »Entwickler« dauerhaft und gut sichtbar in der Menüleiste.
Safari und Chrome haben denselben Ursprung – Webkit –, aber die Konsole liegt bei Chrome hinter den drei Punkten rechts oben im Browserfenster.
Abb. 1.8: Unter »Weitere Tools« liegen die »Entwicklertools« weit unten.
Firefox zeigt auf der rechten Seite des Browserfensters die drei kleinen Balken eines Hamburger-Menüs ≡, von dort aus am unteren Ende des Menüs »Weitere Werkzeuge« >> »Browser-Konsole«.
Trotz kleiner Unterschiede in der Funktionalität agieren die Browser-Konsolen aller Hersteller in gleicher Weise. Sie zeigen uns den HTML-Quelltext der Seite, aber für die JavaScript-Entwicklung ist das Register Console der Dreh- und Angelpunkt.
JavaScript zeigt mit dem Befehl console.log Testausgaben, die sicherstellen, dass das Programm auf dem richtigen Weg ist, zeigt Fehlermeldungen und die Ursache des Fehlers (Abbildung 1.9).
Abb. 1.9: Die Console zeigt Testausgaben, die aktuellen Werte von Variablen und das Ergebnis einfacher Abfragen.
Viele der Beispiele in diesem Buch zeigen Konsolen-Ausgaben. Um sie von Code-Beispielen zu unterscheiden, haben sie ihr eigenes Format:
