Inhaltsverzeichnis

Geleitwort

Vorwort

Danksagung

1     Darf ich vorstellen: JavaScript

Thema 1    Welche Version von JavaScript verwenden Sie?

Thema 2    Fließkommazahlen in JavaScript sind anders

Thema 3    Vorsicht bei der impliziten Typumwandlung

Thema 4    Verwenden Sie primitive Datentypen statt Objektwrappern

Thema 5    Vergleichen Sie unterschiedliche Typen nie mit ==

Thema 6    Achtung: JavaScript ergänzt automatisch Semikolons

Thema 7    JavaScript nutzt 16-Bit-Unicode

2     Gültigkeitsbereich von Variablen

Thema 8    Verwenden Sie das globale Objekt so wenig wie möglich

Thema 9    Vergessen Sie nicht, lokale Variablen zu deklarieren

Thema 10  Vermeiden Sie das Schlüsselwort with

Thema 11  Keine Angst vor Closures

Thema 12  Das müssen Sie kennen: Hoisting

Thema 13  Schaffen Sie lokale Gültigkeitsbereiche durch IIFEs

Thema 14  Gültigkeit von benannten Funktionsausdrücken

Thema 15  Verlässliche Gültigkeitsbereiche von lokalen Funktionsdeklarationen

Thema 16  Vermeiden Sie es, Variablen mit eval zu erstellen

Thema 17  Verwenden Sie eval lieber indirekt

3     Funktionen

Thema 18  Die Unterschiede zwischen Funktionen, Methoden und Konstruktoren

Thema 19  Keine Angst vor Funktionen höherer Ordnung

Thema 20  Rufen Sie Methoden mit benutzerdefiniertem Empfänger mit call auf

Thema 21  Rufen Sie variadische Funktionen mit apply auf

Thema 22  Erstellen Sie variadische Funktionen mit arguments

Thema 23  Ändern Sie niemals das arguments-Objekt

Thema 24  Speichern Sie Verweise auf arguments in einer Variable

Thema 25  Extrahieren Sie Methoden mit festem Empfänger per bind

Thema 26  Nutzen Sie bind beim Currying

Thema 27  Kapseln Sie Code mit Closures, nicht mit Strings

Thema 28  Verlassen Sie sich nicht auf die toString-Methode

Thema 29  Vorsicht, wenn Sie den Call Stack inspizieren!

4     Objekte und Prototypen

Thema 30  Achten Sie auf den Unterschied zwischen prototype, getPrototypeOf und __proto__

Thema 31  Verwenden Sie lieber Object.getPrototypeOf statt __proto__

Thema 32  Ändern Sie niemals __proto__!

Thema 33  Erstellen Sie Konstruktoren, die auch ohne new funktionieren

Thema 34  Speichern Sie Methoden mithilfe von Prototypen

Thema 35  Speichern Sie private Daten mithilfe von Closures

Thema 36  Speichern Sie den Instanzstatus nur in Instanzobjekten

Thema 37  this sollten Sie kennen!

Thema 38  Rufen Sie Superklassenkonstruktoren von Subklassenkonstruktoren aus auf

Thema 39  Eigenschaftsnamen aus der Superklasse sollten Sie niemals wiederverwenden!

Thema 40  Vermeiden Sie die Vererbung von Standardklassen

Thema 41  Prototypen sind »richtige« Implementierungen

Thema 42  Das brauchen Sie nicht: Unbesonnenes Monkey-Patching

5     Arrays und Dictionaries

Thema 43  Erstellen Sie schlanke Dictionaries mit Object

Thema 44  Schützen Sie sich mithilfe von Null-Prototypen vor einer Prototyp-Verunreinigung

Thema 45  Schützen Sie sich mit hasOwnProperty vor Prototyp-Verunreinigungen

Thema 46  Verwenden Sie für geordnete Collections lieber Arrays statt Dictionaries

Thema 47  Fügen Sie niemals aufzählbare Eigenschaften zu Object.prototype hinzu!

Thema 48  Ändern Sie Objekte nicht während einer Aufzählung

Thema 49  Verwenden Sie for-Schleifen statt for...in-Schleifen, wenn Sie über Arrays iterieren

Thema 50  Verwenden Sie lieber Iterationsmethoden als Schleifen

Thema 51  Generische Arraymethoden für arrayähnliche Objekte wiederverwenden

Thema 52  Verwenden Sie lieber Arrayliterale statt des Arraykonstruktors

6     Erstellung von Bibliotheken und APIs

Thema 53  Bemühen Sie sich um eine einheitliche Schreibweise

Thema 54  Behandeln Sie »undefined« als »nicht vorhanden«

Thema 55  Zu viele Parameter? Nutzen Sie Optionsobjekte!

Thema 56  Vermeiden Sie unnötige Zustände

Thema 57  Verwenden Sie strukturelle Typisierung für flexible Schnittstellen

Thema 58  Unterscheiden Sie Arrays und arrayähnliche Objekte

Thema 59  Vermeiden Sie übermäßige Typumwandlung

Thema 60  Unterstützen Sie Method Chaining

7     Nebenläufigkeit

Thema 61  Blockieren Sie die Event Queue nicht, wenn I/O stattfindet

Thema 62  Verwenden Sie verschachtelte oder benannte Callbacks für die asynchrone Abarbeitung

Thema 63  Denken Sie an die Fehlerbehandlung!

Thema 64  Nutzen Sie Rekursion für asynchrone Schleifen

Thema 65  Blockieren Sie die Event Queue bei längeren Berechnungen nicht

Thema 66  Steuern Sie nebenläufige Operationen mit einem Zähler

Thema 67  Rufen Sie asynchrone Callbacks niemals synchron auf!

Thema 68  Verwenden Sie Promises für eine sauberere asynchrone Logik

Index