JavaScript Grundlagen

JavaScript: Ãœberblick

JavaScript

Einsatzbereiche:

  • im Webbrowser: Interaktivität von Webseiten / -anwendungen
  • am Webserver: Mittels node.js
  • lokal am Rechner: für Skripte

Standardisierung und Versionen

JavaScript wird unter dem Namen ECMAScript (kurz ES) standardisiert

  • ES5: 2009 veröffentlicht, auch von Internet Explorer unterstützt
  • seit 2015: jährliche neue Version (ES2015, ES2016, ...)

Codebeispiel

// this is a comment

let a = 3;
let b = 4;
console.log(a * b);

if (a * b > 10) {
  console.log('greater');
}

Interaktive Konsole

Interaktive Konsole

Optionen, um JavaScript-Code auszuführen:

  • Schreiben eines Programms als Datei / Sammlung von Dateien
  • Schreiben von Code in einer interaktiven Konsole (z.B. für schnelle Berechnungen, Experimente)

Interaktive Konsole

Zugriff auf eine JavaScript-Konsole:

  • im Webbrowser: Developer Tools (F12) - Konsole
  • in node.js (falls installiert): Terminal-Befehl node

Statements

Statements

Statement = einzelne Anweisung in einer Programmiersprache

Statements werden üblicherweise mit Semikolons abgeschlossen (diese können in JavaScript aber auch meist weggelassen werden)

Variablen

Variablen

Daten können mit einem Namen versehen werden

Variablen werden oft mit let deklariert

let birthYear = 1970;
let currentYear = 2000;
let age = currentYear - birthYear;

Variablen

Variablennamen werden üblicherweise zusammen geschrieben, wobei neue Wortanfänge groß geschrieben werden

Variablennamen dürfen nur aus Buchstaben, Ziffern und Unterstrichen bestehen

Variablen

Ãœberschreiben (neu setzen) von Variablen:

let birthYear = 1962;
birthYear = 1970;
birthYear = birthYear + 1;

Grundlegende (primitive) Datentypen

Grundlegende (primitive) Datentypen

  • Number: Zahl
  • String: Text
  • Boolean: Ja/Nein - Wert (Wahrheitswert)
  • null: fehlender / unbekannter Wert
  • undefined: (noch) nicht zugewiesen

Number

Beispiel:

((7 - 3) * 0.5) / 3.5;

String

Ein String - auch Zeichenkette genannt - repräsentiert Text

Strings werden entweder mit einfachen oder doppelten Anführungszeichen begrenzt

let greeting = 'Hello';
let name = "Tom";

Zusammensetzen von Strings

Zusammensetzen von mehreren Strings:

let name = 'Tom';
let message = 'Hello, ' + name + '!';

Template-Strings

weitere Möglichkeit, Strings zu erstellen - mit Backticks begrenzt (`)

Erlauben das Einsetzen von Werten

let name = 'Tom';
let message = `Hello, ${name}!`;

Template-Strings

Wie schreiben wir dieses Zeichen: ` ?

Shift + Taste neben der Löschtaste, dann Leertaste

oder:

2x Shift + Taste neben der Löschtaste

Strings - Escape-Sequenzen

Problem: Wie setzen wir besondere Zeichen wie z.B. ' innerhalb eines gewöhnlichen Strings?

Ungültig:

let text = 'I'm ready.'

Strings - Escape-Sequenzen

Lösung:

let text = 'I\'m ready';

JavaScript interpretiert die Zeichenfolge \' wie ein einzelnes '

Strings - Weitere Escape-Sequenzen

Zeilenumbruch in 1 Zeile: \n

let a = 'line 1\nline 2';

Einzelner Backslash:

let b = 'C:\\docs';

Boolean

Boolescher Wert: Ja/Nein - Wert

In JavaScript: true oder false

Null

Null repräsentiert einen unbekannten oder fehlenden Wert

let firstName = 'Michael';
let middleName = null;
let lastName = 'Jones';

Undefined

Undefined tritt z.B. bei Variablen auf, die noch nicht zugewiesen wurden

let firstName;

Typen und Typenumwandlungen

Typen

Bestimmen des Typs einer Variable mittels typeof:

let answer = '42';

typeof answer;

Typenumwandlungen

Umwandlung in andere Datentypen: Number(...), String(...), Boolean(...), ...

Alternativen: .toString(), parseInt(), parseFloat()

Funktionen

Funktionen

Funktion: "Unterprogramm", das eine bestimmte Aufgabe erledigen kann

Beispiele für allgemeine vordefinierte Funktionen:

  • Math.sqrt(2) - berechnet Quadratwurzel
  • Math.round(3.14) - rundet eine Zahl
  • console.log("foo") - schreibt in die (Browser-)Konsole

Beispiele für vordefinierte Funktionen im Browser:

  • alert("foo") - öffnet eine Pop-Up-Nachricht
  • open('https://google.com', '_self') - öffnet eine Seite
  • scrollBy(0, 200) - scrollt horizontal bzw vertikal

Funktionen

Funktionen können Parameter übergeben bekommen und einen Rückgabewert zurückliefern

Beispiel: Math.sqrt(2) - Zahl als Parameter, Zahl als Rückgabewert

Beispiel: scrollBy(0, 200) - zwei Zahlen als Parameter, kein Rückgabewert

Methoden

Methode: eine Funktion, die zu einem bestimmten Objekttyp gehört (z.B. zu String)

Beispiele für String-Methoden:

  • firstName.toUpperCase()
  • firstName.includes("x")
  • firstName.replaceAll("a", "@")

Dokumentation

Ressource: MDN (https://developer.mozilla.org)

Beispiele:

Zusammengesetzte Datentypen: object, array

Object

ein object kann benannte Einträge (Properties) haben

let person = {
  firstName: 'John',
  lastName: 'Doe',
  nationality: 'Canada',
  birthYear: 1980,
};

Object

Zugriff auf Properties:

person.firstName
person.firstName = 'Jane';

Object

alternative Syntax mit Anführungszeichen (erlaubt Sonderzeichen):

let person = {
  'first-name': 'John',
  'last-name': 'Doe',
};

Object

alternative Syntax zum Zugreifen auf Properties:

person['first-name']
person['first-name'] = 'Jane';

Object

Ãœbung:

Erstelle und verändere Objekte, die verschiedenes repräsentieren - z.B.:

  • einen Kalendereintrag
  • eine Person
  • ein Produkt in einem Online-Shop
  • ...

Array

Arrays repräsentieren eine Folge von Elementen

let primes = [2, 3, 5, 7, 11];

let users = ['Alice', 'Bob', 'Charlie'];

let products = [
  { name: 'IPhone 12', price: 949 },
  { name: 'Fairphone', price: 419 },
  { name: 'Pixel 5', price: 799 },
];

Array

Auslesen von Array-Elementen mittels Index (bei 0 beginnend)

let users = ['Alice', 'Bob', 'Charlie'];

users[0]
users[1]

Array

Ãœberschreiben von Array-Elementen

users[0] = 'Andrew';

Array

Anhängen von Array-Elementen

users.push('Dora');

Array

Entfernen des letzten Elements:

users.pop();

Entfernen eines Elements anhand des Index:

users.splice(2, 1);

Array

Die Länge eines Arrays bestimmen:

users.length

Ãœbungen

Erstelle und ändere Daten, die aus Objects und Arrays bestehen und die verschiedene Objekte repräsentieren, z.B.:

  • Einträge auf einer Todo-Liste
  • Kalendereinträge
  • Produkte in einem Online-Shop
  • Transaktionen auf einem Bankkonto

JSON-Datenformat

JSON-Datenformat

JSON = JavaScript Object Notation: Datenformat, das auf JavaScript basiert und insbesondere in der Webentwicklung wichtig ist

Datentypen in JSON

  • Null
  • Number
  • String
  • Boolean
  • Array
  • Object

Datentypen in JSON

Strings: in JSON immer mit doppelten Anführungszeichen:

"Hello, world!"

Datentypen in JSON

in JSON müssen die Property-Namen eines Objekts mit Anführungszeichen umschlossen sein

{
  "firstName": "Thomas",
  "lastName": "Edison",
  "birthYear": 1847,
  "living": false
}

JSON-Datenformat

Beispiel für JSON-Daten:

http://jsonplaceholder.typicode.com/users

Objektreferenzen und Mutationen

Objektreferenzen und Mutationen

Was ist der Wert von a am Ende dieses Programms?

let a = [1, 2, 3];
let b = a;
b.push(4);

Objektreferenzen und Mutationen

Eine Zuweisung (z.B. b = a) versieht ein existierendes Objekt mit einem neuen (zusätzlichen) Namen.

Im Hintergrund steht nach wie vor nur ein einzelnes Objekt.

Objektreferenzen und Mutationen

Falls das Original erhalten bleiben soll, kann es kopiert werden oder die abgeänderte Variante basierend auf dem alten Objekt erstellt werden:

let a = [1, 2, 3];
// creating a new copy
let b = a.slice();
// modifying b
b.push(4);
let a = [1, 2, 3];
// creating a new object b based on a
let b = a.concat([4]);
// alternative:
let c = [...a, 4];

Objektreferenzen und Mutationen

Ob eine Methode ein Objekt direkt abändert (wie push) oder ein neues Objekt zurückgibt (wie concat) muss in der Dokumentation nachgelesen werden.

Objektreferenzen und Mutationen

Manche Datentypen können direkt verändert (mutiert) werden - z.B. via .push(), .pop(), ...

Beispiele: object, array

Einige einfache Objekte sind nach ihrer Erstellung unveränderlich.

Beispiele: number, string, boolean

Dokumentation und Ressourcen

Dokumentation und Ressourcen

Entwicklungsumgebungen

Entwicklungsumgebungen

Entwicklungsumgebungen für JavaScript:

  • VS Code (open source)
  • WebStorm

VS Code

Siehe die Präsentation VS Code

JavaScript-Dateien ausführen

JavaScript-Dateien ausführen

Zwei wichtige Möglichkeiten:

Einbinden in eine HTML-Seite, aufrufen der Seite im Browser:

<script src="myscript.js"></script>

Direktes Ausführen mittels node.js:

node myscript.js

JavaScript-Dateien ausführen

Einbinden in HTML-Seite:

traditionelle Möglichkeit - erlaubt auch Entwicklung im lokalen Dateisystem:

<script src="myscript.js"></script>

moderne Möglichkeit - ermöglicht imports in JavaScript - muss auf einem Server gehostet sein (kann auch ein lokaler Server sein)

<script src="myscript.js" type="module"></script>

Kommentare

Kommentare

Kommentare dienen Entwicklern, um ihren Code zu beschreiben und zu erklären. Sie werden bei der Ausführung von JavaScript ignoriert.

Ãœblicherweise stehen Kommentare oberhalb des Codes, den sie beschreiben

Kommentare

Es gibt zwei Möglichkeiten, Kommentare zu erstellen:

// dies ist ein Kommentar über 1 Zeile

/*
dies ist
ein mehrzeiliger
Kommentar
*/

Variablendeklaration

Variablendeklaration

Wie wir schon gesehen haben: Variablen werden üblicherweise mit let deklariert

Alternativen:

  • Deklaration mit const (nicht mehr neu zuweisbar)
  • Deklaration mit var ("veraltete" Version von let)

Mit let oder const deklarierte Variablen sind nur innerhalb des enstprechenden Codeblocks (innerhalb der umgebenden geschweiften Klammern) gültig. (Mehr dazu später)

Variablendeklaration

mit const deklarierte Zuweisungen können nicht mehr geändert werden

ungültig:

const names = ['Alice', 'Bob', 'Charlie'];
names = [];

Objekte, die hinter diesen Variablennamen stecken, dürfen aber abgeändert werden:

const names = ['Alice', 'Bob', 'Charlie'];
names.push('Dana');

JavaScript im Browser: Grundlagen

JavaScript im Browser

Wir schreiben ein einfaches JavaScript-Programm für den Browser

JavaScript im Browser

index.html:

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <h1>hello!</h1>
    <script src="index.js" type="module"></script>
  </body>
</html>

index.js:

alert('hello!');

JavaScript im Browser

zwei einfache Funktionen, die im Browser vordefiniert sind:

  • alert() - um Text in einem Dialog anzuzeigen
  • prompt() - um den Benutzer in einem Dialog nach einer Eingabe zu fragen

Eingabe und Ausgabe

Eingabe: Mit Hilfe von prompt:

let name = prompt('What is your name?');

prompt liefert immer einen String zurück

Eingabe und Ausgabe

Ausgabe der Begrüßung

alert(`Nice to meet you, ${name}!`);

Ãœbung: Alter anhand Geburtsjahr

Schreibe ein Programm, das den Benutzer nach dem Geburtsjahr fragt und dann angibt, wie alt diese Person im Jahr 2022 wird

Ãœbung: Zufallszahl

Benutzer gibt einen Höchstwert ein (z.B.: 10)

Programm gibt eine Zufallszahl im gewünschten Intervall aus (z.B.: 7)

Verwende hierfür Funktionen aus dem Math-Objekt (schlage selbst in der Dokumentation nach)

Kontrollstrukturen

Kontrollstrukturen

Mit Kontrollstrukturen können wir bestimmten Code z.B. wiederholt ausführen lassen, oder Code nur in bestimmten Situationen ausführen lassen

Kontrollstrukturen

Die zwei essenziellen Kontrollstrukturen in jeder Programmiersprache:

  • if/else-Abfragen, um unter bestimmten Bedingungen die eine oder die andere Aktion zu setzen
  • Schleifen, um unter bestimmten Bedingungen eine Aktion zu wiederholen

Konrtollstrukturen

Beispiel: if-Abfrage

let a = 3;
if (a > 0) {
  console.log('a is greater than 0');
  console.log('a is positive');
}

Konstrollstrukturen

Beispiel: for-of-Schleife

let names = ['Alice', 'Bob', 'Charlie'];
for (let name of names) {
  console.log(`Hello, ${name}!`);
  console.log(`Bye, ${name}!`);
}

Vergleiche

Vergleiche

Für den Einsatz von grundlegenden Kontrollstrukturen müssen wir Werte vergleichen können:

let a = 2;
let b = 3;
let c = '2';

console.log(a == b); // a gleich b
console.log(a == c); // a gleich c
console.log(a === c); // a gleich c (strikt)

console.log(a != c); // a ungleich b
console.log(a !== c); // a ungleich c (strikt)

Vergleiche

Viele Entwickler verwenden nur die strikten Vergleichsoperatoren === und !==, um unterwartete Fehler zu vermeiden

Beispiele:

3 === '3'; // false
3 == '3'; // true
0 == []; // true
[] == ''; // true

Vergleiche

console.log(a < b); // less than
console.log(a > b);
console.log(a <= b); // less than or equal to
console.log(a >= b);

Vergleiche

Das Resultat eines Vergleichs ist ein boolescher Wert (True / False)

Wir können das Resultat in einer Variablen speichern:

let isAdult = age >= 18;

Verknüpfung mit &&, ||, !

  • && bedeutet und
  • || bedeutet oder
  • ! bedeutet nicht

Verknüpfung mit &&, ||, !

Beispiele:

let canBecomeUsPresident =
  person.age >= 35 && person.nationality === 'us';
let isTemperatureExtreme =
  temperatureCelsius < -10 || temperatureCelsius > 40;
let isTemperatureNormal = !isTemperatureExtreme;

Codeblöcke

Codeblöcke

Codeblock: Folge von zusammengehörenden Anweisungen (Statements)

insbesondere wichtig bei Kontrollstrukturen und Funktionsdefinitionen

Codeblöcke

Begrenzung eines Codeblocks: mittels { und }

Inhalte typischerweise eingerückt (z.B. mit 2 Leerzeichen)

Codeblöcke

Beispiel im Zusammenspiel mit if:

let a = 3;
if (a > 0) {
  console.log('a is greater than 0');
  console.log('a is positive');
}

Codeblöcke

Scope: Variablen sind nur innerhalb von Codeblöcken verfügbar, in denen sie (z.B. mit let) deklariert wurden

ungültiger Code:

let a = 3;
if (a > 0) {
  let message = 'a is positive';
} else {
  let message = 'a is negative or 0';
}
console.log(message); // ReferenceError!

Codeblöcke

korrigierter Code:

let a = 3;
let message;
if (a > 0) {
  message = 'a is positive';
} else {
  message = 'a is negative or 0';
}
console.log(message);

If / else

If / else

Beispiel:

let age = 30;
let ageSeconds = age * 365 * 24 * 60 * 60;

if (ageSeconds <= 1000000000) {
  console.log('You are less than 1 billion seconds old.');
} else {
  console.log('You are older than 1 billion seconds.');
}

if / else if ... / else

if (ageSeconds <= 100000000) {
  console.log('You are less than 100 million seconds old.');
} else if (ageSeconds < 1000000000) {
  console.log('You are less than 1 billion seconds old');
} else if (ageSeconds < 2000000000) {
  console.log('You are less than 2 billion seconds old');
} else {
  console.log('You are older than 2 billion seconds');
}

Beispiel und Übung: Münzwurf

let coinSide;
// random number between 0 and 1
let number = Math.random();
if (number > 0.5) {
  coinSide = 'heads';
} else {
  coinSide = 'tails';
}

Weitere Ãœbung: Lasse den Benutzer das Ergebnis raten und teile ihm mit, ob er richtig lag

For-of-Schleifen

For-of-Schleifen

Mit einer for-of-Schleife können wir die Inhalte eines Arrays durchlaufen

Bezeichnung in anderen Programmiersprachen: for-each

For-of-Schleifen

const names = ['Alice', 'Bob', 'Charlie'];

for (let name of names) {
  console.log(`Hello, ${name}`);
}

Die Variable name nimmt nacheinander jeden der in names angegebenen Werte an.

Ãœbung: For-of-Schleifen und If-Statements

Beginne mit einem Array von Zahlen, z.B. [2, 5, -3, 8, 1, -5]

Gib alle positiven Einträge aus, z.B. 2, 5, 8, 1

Gib den größten Eintrag aus, z.B. 8

Gib den größten und den kleinsten Eintrag aus z.B. 8, -5

While-Schleifen

While-Schleifen

Eine if-Abfrage führt einen Codeblock einmal aus, wenn ein Kriterium zutrifft

Eine while-Schleife wiederholt einen Codeblock, solange ein Kriterium zutrifft

Beispiel:

let a = 1;

while (a < 2000) {
  console.log(a);
  a = a * 2;
}

Ãœbungen

  • While-Schleife, die die Zahlen 1 bis 10 ausgibt
  • While-Schleife, die die Zahlen der 7er-Reihe des Einmaleins ausgibt

Break und continue

Break und continue

Schlüsselwörter:

  • break: Beenden einer Schleife
  • continue: Beenden eines Durchlaufs

Bei verschachtelten Schleifen beziehen sie sich auf die innerste Schleife

Break

Beispiel:

let a = 1;
while (true) {
  a = a * 2;
  console.log(a);
  if (a > 1000) {
    break;
  }
}

For-Schleifen

For-Schleifen

Zählen von 0 bis 9:

for (let i = 0; i <= 9; i++) {
  console.log(i);
}

äquivalent zu:

let i = 0;
while (i <= 9) {
  console.log(i);
  i++;
}

Erweiterte Zuweisung

erweiterte Zuweisung (augmented assignment): folgende Statements sind äquivalent zueinander

a = a + 1;
a += 1;
a++;

For-Schleifen

Ãœbung: Ausgabe einer Multiplikationstafel

1 x 7 = 7
2 x 7 = 14
3 x 7 = 21
4 x 7 = 28
...

Bestandteile von Programmen

Bestandteile von Programmen

  • Programme
    • Codeblöcke
      • Anweisungen
        • Ausdrücke

Ãœbungen

Ãœbungen

Ãœbungen zu for-of-Schleifen und while-Schleifen:

  • Zahlenraten mit Zufallszahl mit mehreren Versuchen
  • Rechentrainer mit Zufallsaufgaben

While-Schleifen: Ãœbungen

Ãœbung: Einkaufsliste

Beispiel für Interaktion:

enter an item or "x" to quit:
milk
enter an item or "x" to quit:
bread
enter an item or "x" to quit:
apples
enter an item or "x" to quit:
x
your shopping list is:
- milk
- bread
- apples

Beispiel: Login-System

// users and passwords
let users = [
  { username: 'Alice', password: '1234' },
  { username: 'Bob', password: 'password' },
  { username: 'Charlie', password: 'paris41' },
];

Beispiel: Login-System

Beispielhafter Programmlauf:

Enter your username:
lice
No such user.
Enter your username:
Alice
Enter your password:
123
Wrong password
Enter your password:
1234
Logged in as Alice!

Kontrollstrukturen - Ãœbungen

Kontrollstrukturen - Ãœbungen

  • Zahlenraten
  • Gesetze nach Alter
  • Rechentrainer (mit Zufallsaufgaben)
  • Loginsystem
  • Schaltjahr
  • Babylonisches Wurzelziehen

Builtins

Builtins

wichtige "eingebaute" Funktionen in JavaScript

  • console.log() - Text in der Browser-Konsole ausgeben
  • Math - mathematische Funktionen
  • Date - Arbeiten mit Uhrzeit und Datum
  • JSON.parse(), JSON.stringify() - Konvertieren zwischen JS-Objekten und JSON-Strings
  • ...

Builtins im Browser

  • document
  • alert, prompt
  • fetch
  • ...

Builtins: console.log

Text in der Konsole ausgeben:

console.log('foo');

Builtins: Date

aktueller Timestamp:

let a = new Date();

Methoden:

a.toLocaleTimeString();
a.toLocaleDateString();
a.toISOString();
a.getHours();
// ...

Builtins: Math

  • Math.round, Math.ceil, Math.floor
  • Math.max, Math.min
  • Math.random
  • Math.PI
  • ...

Funktionen

Funktionen

Wir kennen schon einige vordefinierte Funktionen, z.B. alert(), console.log()

Parameter und Rückgabewerte

Funktionen können Parameter übergeben bekommen und Rückgabewerte haben.

Beispiel: Math.max(2, 9, 4) → 9

Parameter: 2, 9, 4

Rückgabewert: 9

Funktionsdefinition

Funktionsdefinition

"traditionelle" Funktionsdefintion:

function average(a, b) {
  let m = (a + b) / 2;
  return m;
}

Standardwerte für Parameter

In Funktionen können Standardwerte für Parameter definiert werden:

function join(strings, separator = '') {
  // ...
}

Aufruf:

join(['foo', 'bar'], '-');
join(['foo', 'bar']);

Scope

Eine Funktionsdefinition öffnet einen neuen Scope, einen Geltungsbereich für Variablen

Im folgenden Beispiel: zwei separate Variablen, die beide mit m benannt sind:

let m = 'Hello, world';

function average(a, b) {
  let m = (a + b) / 2;
  return m;
}
x = average(1, 2);

console.log(m); // logs "Hello, world"

Funktionsausdrücke

Alternative Möglichkeiten, Funktionen zu definieren:

Pfeilfunktion:

let average = (a, b) => {
  let m = (a + b) / 2;
  return m;
};

Funktionsausdruck (heutzutage weniger verbreitet)

let average = function (a, b) {
  let m = (a + b) / 2;
  return m;
};

Pfeilfunktionen

Kurzschreibweise einer Pfeilfunktion, wenn der Rückgabewert ein einzelner Ausdruck ist:

let average = (a, b) => (a + b) / 2;

Klammern für den Codeblock und return werden weggelassen

Pfeilfunktionen

Achtung: { und } sind mehrdeutig (können sowohl Objekte als auch Codeblöcke begrenzen)

// unzulässig:
const getPerson1 = () => {
  firstName: 'Thomas',
  lastName: 'Edison',
  birthYear: 1847,
};
// stattdessen:
const getPerson1 = () => ({
  firstName: 'Thomas',
  lastName: 'Edison',
  birthYear: 1847,
});

Funktionen: Ãœbungen

Funktionen: Ãœbungen

  • Funktion, die überprüft, ob ein Jahr ein Schaltjahr ist
  • Funktion, die überprüft, ob eine Zahl eine Primzahl ist
  • Funktion, die alle Primzahlen in einem Intervall zurückgibt
  • Funktion, die die Prüfziffer eines Strichcodes validiert (GTIN Prüfziffer)
  • Funktion, die die Fibonacci-Zahlen berechnet
  • Funktion, die eine Liste von Lotteriezahlen generiert
  • Funktion, die dem Benutzer eine ja/nein-Frage stellt und True oder False zurückgibt

für Strichcodes / Primzahlen: % - Operator

Module

Module

JavaScript-Code kann in einzelne Dateien (Module) aufgeteilt und aus diesen importiert werden

um das im Browser zu erlauben, muss das Einstiegs-Skript in HTML als Modul gekennzeichnet werden:

<script src="index.js" type="module"></script>

Module

benannte Imports und Exports:

// mymodule.js
const foo = 1;
const bar = 2;
const baz = 3;

export { foo, bar, baz };
// index.js
import { foo, bar } from './mymodule.js';

Module

es kann einen default export geben:

// mymodule.js
const foo = 1;
const bar = 2;
const baz = 3;

export { foo, bar, baz };

const main = 0;

export default main;
// index.js
import main, { foo, bar } from 'mymodule.js';

Module

Imports müssen immer zuoberst in einer Datei stehen

JSDoc

JSDoc

Markup-Sprache für Dokumentation zu Funktionen / Klassen / ... in entsprechenden Kommentaren

Beispiel:

/**
 * Computes the n-th fibonacci number.
 *
 * @param {number} n the index of the fibonacci number
 * @returns {number} n-th fibonacci number
 */
function fibonacci(n) {
  ...
}