Start · Sprachen · JavaScript · Kapitel · Best Practices & Fallstricke
// Kapitel · JavaScript

Best Practices & Fallstricke

Die häufigsten Fallstricke in JavaScript und wie du sie vermeidest: Vergleiche, Standardwerte, Mutation, asynchroner Code und Gleitkommazahlen.

Viele Bugs in JavaScript entstehen nicht durch komplexe Logik, sondern durch bekannte Eigenheiten der Sprache. Hier findest du die häufigsten Stolperfallen und wie du sie mit moderner Syntax umgehst.

Strikter Vergleich und sinnvolle Standardwerte

Nutze === statt ==, dann gibt es keine implizite Typumwandlung. Für Standardwerte ist ?? meist besser als ||, weil es 0 und '' stehen lässt.

0 == '';   // true – Überraschung
0 === '';  // false

const limit = options.limit || 10;     // 0 wird zu 10!
const safeLimit = options.limit ?? 10; // 0 bleibt 0
const city = user?.address?.city ?? 'unbekannt';

Ungewollte Mutation vermeiden

const schützt nur die Bindung, nicht den Inhalt. sort(), reverse() und splice() verändern das Original-Array. Seit ES2023 gibt es Varianten, die das Original unverändert lassen.

const nums = [10, 1, 5];
const sorted = nums.toSorted((a, b) => a - b); // nums bleibt gleich
const copy = { ...config, debug: true };      // flache Kopie
const deep = structuredClone(config);         // tiefe Kopie

Achtung: sort() ohne Vergleichsfunktion sortiert als Zeichenketten. [10, 1, 5].sort() ergibt [1, 10, 5].

Asynchronen Code richtig schreiben

forEach wartet nicht auf async-Callbacks. Nimm for...of, wenn die Schritte nacheinander laufen sollen, und Promise.all, wenn sie parallel laufen dürfen. Fang Fehler immer ab.

const loadAll = async (ids) => {
  try {
    return await Promise.all(ids.map(async (id) => {
      const res = await fetch(`/api/users/${id}`);
      if (!res.ok) throw new Error(`HTTP ${res.status}`);
      return res.json();
    }));
  } catch (err) {
    console.error('Laden fehlgeschlagen:', err);
    return [];
  }
};

Wichtig: fetch wirft bei 404 oder 500 keinen Fehler. Prüf deshalb immer res.ok.

Zahlen und Gleitkomma

Zahlen in JavaScript sind binäre Gleitkommazahlen (IEEE 754). Vergleich sie deshalb mit einer Toleranz und speicher Geldbeträge als ganze Cent-Werte.

0.1 + 0.2 === 0.3;                           // false
Math.abs(0.1 + 0.2 - 0.3) < Number.EPSILON;  // true
Number.isNaN('abc');                         // false (isNaN('abc') → true)