Guter JavaScript-Code ist lesbar, vorhersagbar und vermeidet bekannte Stolperfallen.
Lesbarkeit
- Sprechende Namen:
anzahlKundenstattn,istAktivstattflag. Funktionen sind Verben (berechneSumme), Booleans lesen sich wie Fragen (hatZugriff) - Kleine Funktionen: eine Funktion, eine Aufgabe
- Frühe Rückgabe statt tiefer Verschachtelung
- Keine magischen Zahlen:
const MAX_VERSUCHE = 3statt einer losen3 - Kommentare erklären das Warum, nicht das Was
Eingabe (optional)
Ergebnis
Ausgabe
true true false
Empfohlene Gewohnheiten
| Tue | Statt |
|---|---|
const / let | var |
=== | == |
| Template-Strings | Text mit + zusammenkleben |
map/filter/reduce | Schleifen, die Arrays aufbauen |
?. und ?? | lange &&-Ketten |
async/await | verschachtelte Callbacks |
Module (import) | globale Variablen |
Häufige Fallen
1. Typumwandlung
Eingabe (optional)
Ergebnis
Ausgabe
51 4 [object Object] 1,23 false 9007199254740992 [ 1, 10, 9 ] 8 31 0 0 0 NaN
2. this verloren
Eingabe (optional)
Ergebnis
Ausgabe
Hallo Mia | Hallo undefined Hallo Tom | Hallo Mia
3. Veränderliche geteilte Daten
Eingabe (optional)
Ergebnis
Ausgabe
[ 1, 2, 3 ] [ 1, 2, 3 ] [ 1, 2, 3, 4 ] [ 1 ] [ 1 ]
4. Vergessene await
Eingabe (optional)
Ergebnis
Ausgabe
object true 42
5. Gleichheit von Objekten
Eingabe (optional)
Ergebnis
Ausgabe
false false true false true true true
6. Schleifen und Closures mit var
Siehe Kapitel Gültigkeitsbereich: Nutze let/const in Schleifen.
7. Unveränderliches bevorzugen
Funktionen, die ihre Eingaben nicht verändern, sind leichter zu verstehen. Nutze toSorted, toReversed, Spread und structuredClone, statt Parameter zu mutieren.
Sicherheit im Web-Code
- XSS: Setze nie ungeprüfte Nutzereingaben per
innerHTMLein; benutzetextContentoder baue Elemente mitcreateElement - Keine Geheimnisse im Frontend: API-Schlüssel und Passwörter im Browsercode sind für alle sichtbar
- Eingaben nie vertrauen: Prüfe sie am Server, auch wenn der Browser sie schon geprüft hat
- eval() und new Function() nicht für Nutzereingaben verwenden
- Abhängigkeiten aktuell halten (
npm audit)
Leistung
- Nur messen, was langsam ist, nicht raten (
console.time, Performance-Tab) - DOM-Zugriffe bündeln, nicht in jeder Schleife
innerHTML +=ausführen - Große Listen mit Virtualisierung oder Paginierung anzeigen
- Ereignisse mit Debounce/Throttle drosseln
- Ressourcen nachladen, wenn sie gebraucht werden (
import(),loading="lazy")
Barrierefreiheit
- Native Elemente (
button,a,input) stattdivmit Klick-Listener - Alle Funktionen per Tastatur erreichbar machen
- Dynamische Änderungen mit
aria-liveoderrole="status"ankündigen - Fokus beim Öffnen und Schließen von Dialogen bewusst setzen
Merke
- Sprechende Namen, kleine Funktionen, frühe Rückgabe
const/let,===, Template-Strings,async/await- Fallen: Typumwandlung,
this, flache Kopien, vergesseneawait, Objektgleichheit - Eingaben nie ungeprüft in
innerHTML; keine Geheimnisse im Frontend - Erst messen, dann optimieren
Aufgabe
Gehe ein älteres Skript durch und ersetze var, == und verschachtelte Bedingungen durch moderne Muster. Schreibe zu jeder Änderung einen Satz, warum.