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.
| 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 |
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!
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.
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 | = | += | -= | *= | /= | %= | |||
switch (Name) { case Value: …; break; default: …; break; }if (Condition) { … } else if { … } else { … }while (Condition) { … }do { … } while (Condition)for (Statement; Condition; Statement) { … }for (Index in Enumerable) { … }for (Element of Iterable) { … }for await (Element of Iterable) { … }continuebreakreturn Expressionthrow Nametry { … } catch (Name) { … } finally { … }