JavaScript Basics
Variablen, Funktionen, DOM-Manipulation und Events - mit interaktiven Demos zum Ausprobieren.
JavaScript Grundlagen
Auf dieser Seite findest du die wichtigsten Bausteine von JavaScript - von Variablen über Funktionen bis zu Events. Viel Code, aber keine Panik: Jedes Konzept wird Schritt für Schritt erklärt und du kannst alles direkt ausprobieren.
Wo kommt JavaScript hin?
JavaScript kann an drei Stellen eingebunden werden:
1. Inline JavaScript (direkt im HTML)
<button onclick="alert('Hallo!')">Klick mich</button>
Funktioniert, aber nicht empfohlen - mischt Verhalten mit Struktur.
2. Internal JavaScript (im <script>-Tag)
<script>
console.log('Hallo von JavaScript!');
// Dein JavaScript-Code hier
</script>
Gut für kleine Scripte oder zum Testen.
3. External JavaScript (separate Datei) - BEST PRACTICE
<!-- Vor dem schließenden </body>-Tag -->
<script src="js/script.js"></script>
Externe Dateien sind am übersichtlichsten und wie ich hier gelernt habe, auch am
sichersten!
Das Script-Tag kommt meist kurz vor </body>, damit
erst das HTML geladen wird, bevor JavaScript darauf zugreift.
Variablen und Datentypen
Variablen sind Container für Daten. Es gibt drei Möglichkeiten, sie zu deklarieren:
let, const und var
// let - kann später geändert werden (empfohlen für veränderliche Werte)
let name = "Anna-Maria";
name = "Anna"; // Funktioniert
// const - konstant, kann nicht geändert werden (empfohlen, wenn möglich)
const maxAge = 99;
// maxAge = 100; // Würde einen Fehler werfen
// var - alte Methode (besser vermeiden)
var oldStyle = "nicht mehr modern";
Immer const verwenden, außer du weißt, dass sich der Wert
ändern
wird - dann
let.
var einfach vergessen - ich habe es niemals erwähnt.
Datentypen
// String - Text in Anführungszeichen
let text = "Hallo Welt";
let text2 = 'Auch mit einfachen Anführungszeichen';
let text3 = `Template Literal mit ${text}`; // Kann Variablen enthalten
// Number - Zahlen (ganze und Dezimalzahlen)
let ganzzahl = 42;
let dezimal = 3.14;
// Boolean - wahr oder falsch
let istWahr = true;
let istFalsch = false;
// Array - Liste von Werten
let farben = ["rot", "grün", "blau"];
let zahlen = [1, 2, 3, 4, 5];
// Object - Sammlung von Eigenschaften
let person = {
name: "Max",
alter: 30,
stadt: "Berlin"
};
// undefined - Variable wurde deklariert, aber hat keinen Wert
let nochNichtsDefiniert;
// null - absichtlich kein Wert
let leer = null;
Datentyp prüfen mit typeof
console.log(typeof "Hallo"); // "string"
console.log(typeof 42); // "number"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (historischer Bug!)
console.log(typeof [1, 2, 3]); // "object"
console.log(typeof {a: 1}); // "object"
Interaktives Beispiel: Variablen
Gib einen Text ein, und ich speichere ihn in einer Variable:
// Variable Demo
let gespeicherterWert;
function speichereVariable() {
let input = document.getElementById("userInput").value;
gespeicherterWert = input;
document.getElementById("variableOutput").innerHTML =
`✅ Gespeichert in Variable: <strong>gespeicherterWert = "${gespeicherterWert}"</strong>`;
}
function zeigeVariable() {
if (gespeicherterWert !== undefined) {
document.getElementById("variableOutput").innerHTML =
`📦 Variable enthält: <strong>"${gespeicherterWert}"</strong>`;
} else {
document.getElementById("variableOutput").innerHTML =
`⚠️ Variable ist noch <strong>undefined</strong> - erst speichern!`;
}
}
Strings und Template Literals
Text in JavaScript kann auf drei Arten geschrieben werden:
// Einfache Anführungszeichen
let text1 = 'Hallo Welt';
// Doppelte Anführungszeichen
let text2 = "Hallo Welt";
// Template Literals (Backticks) - können Variablen enthalten
let name = "Max";
let text3 = `Hallo ${name}!`; // "Hallo Max!"
// Mehrzeilige Strings nur mit Backticks
let mehrzeilig = `
Zeile 1
Zeile 2
Zeile 3
`;
Template Literals (Backticks) sind besonders praktisch, wenn du Variablen in Strings
einbauen willst -
kein umständliches "Hallo " + name + "!" mehr nötig.
Operatoren
Arithmetische Operatoren
let a = 10;
let b = 3;
console.log(a + b); // 13 (Addition)
console.log(a - b); // 7 (Subtraktion)
console.log(a * b); // 30 (Multiplikation)
console.log(a / b); // 3.333... (Division)
console.log(a % b); // 1 (Modulo - Rest der Division)
console.log(a ** b); // 1000 (Potenz - 10³)
Vergleichsoperatoren
let x = 5;
console.log(x == 5); // true (gleicher Wert)
console.log(x == "5"); // true (gleicher Wert, andere Typen erlaubt)
console.log(x === "5"); // false (gleicher Wert UND gleicher Typ)
console.log(x !== "5"); // true (ungleich in Wert oder Typ)
console.log(x > 3); // true (größer als)
console.log(x >= 5); // true (größer oder gleich)
console.log(x < 10); // true (kleiner als)
console.log(x <= 4); // false (kleiner oder gleich)
Immer === statt == verwenden!
Das
prüft auch den Datentyp und
verhindert unerwartete Bugs.
Logische Operatoren
let istErwachsen = true;
let hatFuehrerschein = false;
console.log(istErwachsen && hatFuehrerschein); // false (UND - beide müssen wahr sein)
console.log(istErwachsen || hatFuehrerschein); // true (ODER - einer muss wahr sein)
console.log(!istErwachsen); // false (NICHT - kehrt Wert um)
Funktionen
Funktionen sind wiederverwendbare Code-Blöcke. Es gibt mehrere Möglichkeiten, sie zu schreiben:
Function Declaration (klassisch)
function gruss(name) {
return "Hallo " + name + "!";
}
console.log(gruss("Max")); // "Hallo Max!"
Arrow Function (modern)
// Kurze Schreibweise
const gruss = (name) => "Hallo " + name + "!";
// Mit mehreren Zeilen
const berechneFlaeche = (breite, hoehe) => {
let flaeche = breite * hoehe;
return flaeche;
};
console.log(gruss("Anna")); // "Hallo Anna!"
console.log(berechneFlaeche(5, 10)); // 50
Parameter und Return
// Funktion mit mehreren Parametern
function addiere(a, b) {
return a + b;
}
// Funktion ohne Return (gibt undefined zurück)
function sagHallo() {
console.log("Hallo!");
}
// Default-Parameter (wenn kein Wert übergeben wird)
function begruessung(name = "Gast") {
return `Willkommen, ${name}!`;
}
console.log(addiere(5, 3)); // 8
sagHallo(); // Gibt "Hallo!" in der Konsole aus
console.log(begruessung()); // "Willkommen, Gast!"
console.log(begruessung("Max")); // "Willkommen, Max!"
Interaktives Beispiel: Funktionen
Teste eine einfache Addition-Funktion:
+// Function Demo
function berechneAddition() {
let num1 = parseFloat(document.getElementById("num1").value);
let num2 = parseFloat(document.getElementById("num2").value);
let ergebnis = num1 + num2;
document.getElementById("functionOutput").innerHTML =
`<strong>Funktion ausgeführt:</strong><br>
addiere(${num1}, ${num2}) = <strong>${ergebnis}</strong>`;
}
If/Else - Bedingungen
Mit Bedingungen kann dein Code Entscheidungen treffen:
let alter = 18;
if (alter >= 18) {
console.log("Du bist volljährig");
} else {
console.log("Du bist noch minderjährig");
}
// Mit else if für mehrere Bedingungen
let note = 2;
if (note === 1) {
console.log("Sehr gut!");
} else if (note === 2) {
console.log("Gut!");
} else if (note === 3) {
console.log("Befriedigend");
} else {
console.log("Da ist noch Luft nach oben");
}
Ternärer Operator (Kurzform)
// Bedingung ? wennWahr : wennFalsch
let alter = 20;
let status = alter >= 18 ? "erwachsen" : "minderjährig";
console.log(status); // "erwachsen"
Interaktives Beispiel: Bedingungen
Gib dein Alter ein:
// Condition Demo
function pruefeAlter() {
let alter = parseInt(document.getElementById("ageInput").value);
let output = document.getElementById("conditionOutput");
if (isNaN(alter)) {
output.innerHTML = "⚠️ Bitte gib eine Zahl ein!";
return;
}
if (alter >= 18) {
output.innerHTML = `✅ Mit ${alter} Jahren bist du <strong>volljährig</strong>!`;
} else {
output.innerHTML = `🔒 Mit ${alter} Jahren bist du noch <strong>minderjährig</strong>.`;
}
}
Schleifen (Loops)
Schleifen wiederholen Code mehrmals:
For-Schleife
// Zähle von 0 bis 4
for (let i = 0; i < 5; i++) {
console.log(i);
}
// Ausgabe: 0, 1, 2, 3, 4
// Durchlaufe ein Array
let farben = ["rot", "grün", "blau"];
for (let i = 0; i < farben.length; i++) {
console.log(farben[i]);
}
While-Schleife
let zaehler = 0;
while (zaehler < 5) {
console.log(zaehler);
zaehler++;
}
// Ausgabe: 0, 1, 2, 3, 4
forEach (für Arrays)
let fruechte = ["Apfel", "Banane", "Orange"];
fruechte.forEach(function(frucht) {
console.log(frucht);
});
// Mit Arrow Function (kürzer)
fruechte.forEach(frucht => console.log(frucht));
Interaktives Beispiel: Schleifen
// Loop Demo
function zeigeSchleife() {
let output = "<strong>For-Schleife läuft:</strong><br><br>";
for (let i = 1; i <= 5; i++) {
output += `Durchlauf ${i}: i = ${i}<br>`;
}
document.getElementById("loopOutput").innerHTML = output;
}
DOM-Manipulation
Das DOM (Document Object Model) ist die JavaScript-Repräsentation deiner HTML-Seite. Damit kannst du HTML-Elemente finden, ändern, erstellen oder löschen.
Elemente auswählen
// Ein Element per ID
let element = document.getElementById("meinElement");
// Ein Element per CSS-Selektor (das erste gefundene)
let element = document.querySelector(".meine-klasse");
let element = document.querySelector("#meine-id");
// Alle Elemente per CSS-Selektor
let elemente = document.querySelectorAll(".meine-klasse");
// Alle Elemente mit einem Tag-Namen
let absaetze = document.getElementsByTagName("p");
Inhalt ändern
let element = document.getElementById("output");
// Text ändern (nur Text, kein HTML)
element.textContent = "Neuer Text";
// HTML ändern (kann HTML-Tags enthalten)
element.innerHTML = "<strong>Fetter Text</strong>";
// Attribute ändern
element.setAttribute("class", "neue-klasse");
element.style.color = "red";
element.style.fontSize = "20px";
Klassen hinzufügen/entfernen
let element = document.getElementById("box");
// Klasse hinzufügen
element.classList.add("aktiv");
// Klasse entfernen
element.classList.remove("inaktiv");
// Klasse toggeln (hinzufügen wenn nicht da, entfernen wenn da)
element.classList.toggle("highlight");
// Prüfen ob Klasse existiert
if (element.classList.contains("aktiv")) {
console.log("Element ist aktiv");
}
Interaktives Beispiel: DOM-Manipulation
Dieser Text kann geändert werden!
// DOM Manipulation Demo
let farbIndex = 0;
let farben = ["#344149ff", "#635b4eff", "#5e4462ff", "#344e4cff"];
let hatKlasse = false;
function aendereText() {
let texte = [
"Text wurde geändert! 🎉",
"Noch ein neuer Text!",
"JavaScript macht Spaß! 😊",
"Dieser Text kann geändert werden!"
];
let randomText = texte[Math.floor(Math.random() * texte.length)];
document.getElementById("demoText").textContent = randomText;
}
function aendereFarbe() {
farbIndex = (farbIndex + 1) % farben.length;
document.getElementById("demoBox").style.backgroundColor = farben[farbIndex];
}
function toggleKlasse() {
let box = document.getElementById("demoBox");
if (hatKlasse) {
box.style.border = "none";
box.style.transform = "scale(1)";
hatKlasse = false;
} else {
box.style.border = "4px solid var(--heading-primary)";
box.style.transform = "scale(1.05)";
hatKlasse = true;
}
}
Events (Ereignisse)
Events sind Aktionen, die auf der Webseite passieren - z.B. Klicks, Tastatureingaben, Mausbewegungen.
Event Listener hinzufügen
// Element auswählen
let button = document.getElementById("meinButton");
// Event Listener hinzufügen
button.addEventListener("click", function() {
console.log("Button wurde geklickt!");
});
// Mit Arrow Function (kürzer)
button.addEventListener("click", () => {
console.log("Button wurde geklickt!");
});
Wichtige Event-Typen
// Click - Mausklick
element.addEventListener("click", () => {});
// DblClick - Doppelklick
element.addEventListener("dblclick", () => {});
// MouseOver - Maus bewegt sich über Element
element.addEventListener("mouseover", () => {});
// MouseOut - Maus verlässt Element
element.addEventListener("mouseout", () => {});
// KeyPress, KeyDown, KeyUp - Tastatur-Events
document.addEventListener("keydown", (e) => {
console.log("Taste gedrückt:", e.key);
});
// Input - Text wird in ein Feld eingegeben
inputField.addEventListener("input", (e) => {
console.log("Aktueller Wert:", e.target.value);
});
// Submit - Formular wird abgeschickt
form.addEventListener("submit", (e) => {
e.preventDefault(); // Verhindert Standard-Verhalten
console.log("Formular würde abgeschickt");
});
Event-Objekt
button.addEventListener("click", function(event) {
console.log(event); // Das komplette Event-Objekt
console.log(event.target); // Das Element, das geklickt wurde
console.log(event.type); // Der Event-Typ ("click")
console.log(event.clientX); // X-Position der Maus
console.log(event.clientY); // Y-Position der Maus
});
Interaktives Beispiel: Events
// Event Listeners initialisieren wenn DOM geladen ist
document.addEventListener("DOMContentLoaded", function() {
// Variable Demo Buttons
let speichernBtn = document.getElementById("speichernBtn");
let zeigenBtn = document.getElementById("zeigenBtn");
if (speichernBtn) speichernBtn.addEventListener("click", speichereVariable);
if (zeigenBtn) zeigenBtn.addEventListener("click", zeigeVariable);
// Function Demo Button
let additionBtn = document.getElementById("additionBtn");
if (additionBtn) additionBtn.addEventListener("click", berechneAddition);
// Condition Demo Button
let alterBtn = document.getElementById("alterBtn");
if (alterBtn) alterBtn.addEventListener("click", pruefeAlter);
// Loop Demo Button
let schleifeBtn = document.getElementById("schleifeBtn");
if (schleifeBtn) schleifeBtn.addEventListener("click", zeigeSchleife);
// DOM Manipulation Demo Buttons
let textBtn = document.getElementById("textBtn");
let farbeBtn = document.getElementById("farbeBtn");
let klasseBtn = document.getElementById("klasseBtn");
if (textBtn) textBtn.addEventListener("click", aendereText);
if (farbeBtn) farbeBtn.addEventListener("click", aendereFarbe);
if (klasseBtn) klasseBtn.addEventListener("click", toggleKlasse);
// Array Demo Buttons
let geradeBtn = document.getElementById("geradeBtn");
let verdoppelBtn = document.getElementById("verdoppelBtn");
let summeBtn = document.getElementById("summeBtn");
if (geradeBtn) geradeBtn.addEventListener("click", zeigeGeradeZahlen);
if (verdoppelBtn) verdoppelBtn.addEventListener("click", verdoppleZahlen);
if (summeBtn) summeBtn.addEventListener("click", berechneArraySumme);
// Event Demo - Click Counter und Input Tracking
let eventButton = document.getElementById("eventButton");
let eventInput = document.getElementById("eventInput");
let eventOutput = document.getElementById("eventOutput");
let clickCount = 0;
if (eventButton) {
eventButton.addEventListener("click", function() {
clickCount++;
eventOutput.innerHTML =
`🖱️ <strong>Click-Event!</strong><br>Button wurde ${clickCount}x geklickt`;
});
}
if (eventInput) {
eventInput.addEventListener("input", function(e) {
eventOutput.innerHTML =
`⌨️ <strong>Input-Event!</strong><br>Du hast getippt: "${e.target.value}"`;
});
}
});
Wichtige Array-Methoden
Arrays haben viele nützliche Methoden:
let zahlen = [1, 2, 3, 4, 5];
// map() - transformiert jedes Element
let verdoppelt = zahlen.map(zahl => zahl * 2);
console.log(verdoppelt); // [2, 4, 6, 8, 10]
// filter() - filtert Elemente nach Bedingung
let gerade = zahlen.filter(zahl => zahl % 2 === 0);
console.log(gerade); // [2, 4]
// find() - findet das erste Element, das die Bedingung erfüllt
let gefunden = zahlen.find(zahl => zahl > 3);
console.log(gefunden); // 4
// reduce() - reduziert Array auf einen Wert
let summe = zahlen.reduce((acc, zahl) => acc + zahl, 0);
console.log(summe); // 15
// push() - Element am Ende hinzufügen
zahlen.push(6);
console.log(zahlen); // [1, 2, 3, 4, 5, 6]
// pop() - letztes Element entfernen
let letztes = zahlen.pop();
console.log(letztes); // 6
// shift() - erstes Element entfernen
let erstes = zahlen.shift();
console.log(erstes); // 1
// unshift() - Element am Anfang hinzufügen
zahlen.unshift(0);
console.log(zahlen); // [0, 2, 3, 4, 5]
Interaktives Beispiel: Array-Methoden
Array: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
// Array Demo
function zeigeGeradeZahlen() {
let zahlen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let gerade = zahlen.filter(zahl => zahl % 2 === 0);
document.getElementById("arrayOutput").innerHTML =
`<strong>.filter()</strong> → Nur gerade Zahlen: <strong>[${gerade.join(", ")}]</strong>`;
}
function verdoppleZahlen() {
let zahlen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let verdoppelt = zahlen.map(zahl => zahl * 2);
document.getElementById("arrayOutput").innerHTML =
`<strong>.map()</strong> → Alle verdoppelt: <strong>[${verdoppelt.join(", ")}]</strong>`;
}
function berechneArraySumme() {
let zahlen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let summe = zahlen.reduce((acc, zahl) => acc + zahl, 0);
document.getElementById("arrayOutput").innerHTML =
`<strong>.reduce()</strong> → Summe aller Zahlen: <strong>${summe}</strong>`;
}
Console und Debugging
Die Browser-Konsole ist dein bester Freund beim Debuggen:
Console-Methoden
// Normale Ausgabe
console.log("Hallo Welt");
console.log("Wert:", variable);
// Warnung (gelb)
console.warn("Das ist eine Warnung");
// Fehler (rot)
console.error("Das ist ein Fehler");
// Info (blau)
console.info("Das ist eine Info");
// Tabelle für Arrays/Objects
let personen = [
{ name: "Max", alter: 30 },
{ name: "Anna", alter: 25 }
];
console.table(personen);
// Gruppierung
console.group("Meine Gruppe");
console.log("Nachricht 1");
console.log("Nachricht 2");
console.groupEnd();
- Chrome/Edge: F12 oder Rechtsklick → "Untersuchen" → Tab "Console"
- Firefox: F12 oder Rechtsklick → "Element untersuchen" → Tab "Konsole"
- Safari: Cmd+Option+C (Mac) - erst in Einstellungen aktivieren
Best Practices
Was ich beim Lernen von JavaScript als wichtig empfunden habe:
- Verwende const und let, nie var - Moderne Variablen-Deklaration ist sicherer
- Verwende
===statt==- Vergleicht auch den Datentyp, verhindert Bugs - Benenne Variablen aussagekräftig -
userNameist besser alsx - Kommentiere deinen Code - Dein zukünftiges Ich wird es dir danken
- Eine Funktion = eine Aufgabe - Halte Funktionen klein und fokussiert
- Nutze die Konsole zum Testen -
console.log()ist dein Freund - Externe Scripts am Ende des <body> - Damit das HTML erst geladen ist
- Event Listener statt Inline-Events - Trennt JavaScript von HTML
- Camel Case für Variablen -
meineLangeVariable - Prüfe auf undefined/null - Bevor du mit Werten arbeitest
Häufige Fehler
Dinge, über die ich beim Lernen gestolpert bin:
1. Element existiert noch nicht
// FALSCH - Script im <head>, Element existiert noch nicht
let button = document.getElementById("button");
button.addEventListener("click", ...); // Fehler!
// RICHTIG - Script am Ende oder mit DOMContentLoaded
document.addEventListener("DOMContentLoaded", function() {
let button = document.getElementById("button");
button.addEventListener("click", ...);
});
2. Const ändern wollen
// FALSCH
const name = "Max";
name = "Anna"; // Fehler!
// RICHTIG - use let wenn sich der Wert ändern soll
let name = "Max";
name = "Anna"; // OK!
3. == statt ===
// Unerwartetes Verhalten
console.log(5 == "5"); // true (!)
console.log(5 === "5"); // false (korrekt)
4. Event Listener Syntax
// FALSCH - Funktion wird sofort ausgeführt
button.addEventListener("click", meineFunktion());
// RICHTIG - Funktion wird als Referenz übergeben
button.addEventListener("click", meineFunktion);
// ODER mit Arrow Function
button.addEventListener("click", () => meineFunktion());
Mehr aus JavaScript
Tutorials werden geladen...