JavaScript

JavaScript ist eine klassenfreie objektorientierte Sprache. Ursprünglich wurde sie von der Firma Netscape für dynamische Webanwendungen konzipiert und später als ECMA-262 standardisiert.

Versionen

Datum Version Neuerungen
1997 1 Erstveröffentlichung von Netscape
1998 2 Anpassungen an ISO 16262
1999 3 Ausnahmen (try {…} catch {…}), Reguläre Ausdrücke (RegExp)
4 Abgesagt
2009 5 Strikter Modus (use strict), String.{trim,charAt}, Array.isArray(), JSON
2015 6 Blocksicht (let, const), Arrow-Funktion (() => {…}), Module (import), Iteratoren (for…of), Generatoren, Promises, Symbole
2016 7 Exponenten-Operator (**), Nebenläufigkeit (await, async), Arrray.prototype.includes
2017 8 Introspektion (Object.{values,entries,…}), String.prototype.padStart()
2018 9 Klonierung mit Spread Operator (...object)
2019 10 Entschachtelung (Array.prototype.flat())
2020 11 Verkettung (foo?.bar), Potenzierung (**), Kryptographie (BigInt)
2021 12 Ersetzung (String.replaceAll())
2022 13 Object.hasOwn
2023 14 Shebang (#/usr/bin/env node), Array-Funktionen
2024 15 Pipeline Operator (|>), Record (#{…}), Tuple (#[…]), Temporal
2025 Next

Beispiel

Ursprünglich werden JavaScript-Funktionen in Webseiten eingebettet und vom Navigator ausgeführt.

hello.html
<!DOCTYPE html> <html lang="en"> <script>document.writeln ("Hello, " + navigator.appName + "!");</script> </html>

Ausführen mit:

firefox hello.html

Der Interpreteter Node kann eigenständige Programme ausführen.

hello.js
#!/usr/bin/env node if (process.argv.length == 0) { console.log ("Hello, World!\n"); } else { process.argv.forEach (function (arg) { console.log ("Hello, " + arg + "!\n"); }); }

Ausführbar machen und ausführen mit:

chmod +x hello.js && hello.js
Hello, World!

Datentypen

In JavaScript sind alle Variablen Objekte. Eine Variable erbt den Prototyp ihrer Klasse, zum Beispiel String.prototype. Die folgende Tabelle zeigt alle Grundtypen, die man als Literal definieren kann.

Typ falsy truthy Beschreibung
Boolean false true Wahrheitswert
Number 0 NaN 1 Infinity Zahlenliterale sind immer Fließkommazahlen
String '' 'abc' Zeichenketten sind unverändliche Folgen von Zeichen
RegExp // /abc/ Reguläre Ausdrücke...
Array [] [1, 2, 3] Reihungen sind Listen von Objekten
Object {} {val: 1} Objekte sind Streutabellen von Attributen
Function () => {} Funktionen sind aufrufbare Objekte

Variablen sind dynamisch typisiert, sie können durch Zuweisung ihren Typ ändern. Eine nicht initialisierte Variable hat den Wert undefined. Im Gegensatz da dazu steht null für einen nicht vorhandendn Wert. Variablen sollten immer mit var, let oder const deklariert werden. Andernfalls sind sie global sichtbar, was zu unerwünschten Seiteneffekten führt. In logischen Ausdrücken (if) evaluieren die Zahl 0, die leere Zeichenkette, die leere Reihung und das leere Objekt zu false.

Arithmetik

In arithmetischen und logischen Ausdrücken gelten die üblichen Regeln für Vorrang.

Operator
Klammerausdrücke ()
Unäre Arithmetik + - ++ --
Binäre Arithmetik * / % + -
Vergleich < > <= >= == != === !==
Bitoperationen ~ & | ^ << >> >>>
Logik ! && ||
Ternärer Operator ? … :
Zuweisung = += -= *= /= %=

Schleifen

switch (Name) { case Value: …; break; default: …; break; }
Mehrfachverzweigung
if (Condition) { … } else if { … } else { … }
Verzweigung
while (Condition) { … }
Schleife mit Abbruchbedingung
do { … } while (Condition)
Schleife mit Abbruchbedingung am Ende
for (Statement; Condition; Statement) { … }
Schleife mit Initialisierung, Abbruchbedingung und Inkrement
for (Index in Enumerable) { … }
Über Schlüssel einer Liste iterieren
for (Element of Iterable) { … }
Über Elemente einer Menge iterieren
for await (Element of Iterable) { … }
Über Erzeugnisse eines Generators iterieren
continue
Aktuellen Schleifendurchlauf beenden
break
Schleife verlassen
return Expression
Funktion verlassen
throw Name
Ausnahme auslösen
try { … } catch (Name) { … } finally { … }
Ausnahme behandeln

Literatur