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) { … }
continue
break
return Expression
throw Name
try { … } catch (Name) { … } finally { … }