Читать книгу JavaScript – Das Handbuch für die Praxis - David Flanagan - Страница 30

3.1Übersicht und Definitionen

Оглавление

JavaScript-Datentypen lassen sich in zwei Kategorien unterteilen: primitive Typen und Objekttypen. Zu den primitiven Datentypen von JavaScript zählen Zahlen, Strings (im Deutschen auch oft Zeichenfolgen oder Zeichenketten genannt) und boolesche Wahrheitswerte. Ein wesentlicher Teil dieses Kapitels ist einer detaillierten Erklärung der numerischen (siehe 3.2) und String-Typen (siehe 3.3) in JavaScript gewidmet. Booleans werden in 3.4 behandelt.

Die speziellen JavaScript-Werte null und undefined sind primitive Werte, aber weder Zahlen noch Strings noch boolesche Werte. Beide werden in der Regel als einzige Mitglieder ihres jeweils eigenen speziellen Typs betrachtet. In 3.5 erfahren Sie mehr über null und undefined. In ES6 ist ein neuer spezieller Typ – das Symbol – hinzugekommen, mit dessen Hilfe Spracherweiterungen definiert werden können, ohne die Rückwärtskompatibilität zu beeinträchtigen. Symbole werden kurz in 3.6 behandelt.

Jeder JavaScript-Wert, der keine Zahl, kein String, kein boolescher Wert, kein Symbol, nicht null und nicht undefined ist, ist ein Objekt. Ein Objekt (das heißt ein Exemplar des Typs Object) ist eine Sammlung von Eigenschaften, die jeweils einen Namen und einen Wert haben (entweder einen primitiven Wert oder ein anderes Objekt). Ein ganz besonderes Objekt, das globale Objekt, wird in 3.7 behandelt. Eine übergreifendere und ausführlichere Behandlung von Objekten im Allgemeinen finden Sie in Kapitel 6.

Ein normales JavaScript-Objekt ist nichts anderes als eine ungeordnete Sammlung benannter Werte. In JavaScript gibt es außerdem eine spezielle Art von Objekt, das als Array bezeichnet wird. Ein Array ist eine geordnete Sammlung nummerierter Werte. Für die Arbeit mit Arrays – die einige spezielle Verhaltensweisen besitzen, die sie von gewöhnlichen Objekten unterscheiden – bietet JavaScript eine besondere Syntax. Arrays werden detailliert in Kapitel 7 behandelt.

Neben grundlegenden Objekten und Arrays definiert JavaScript eine Reihe weiterer nützlicher Objekttypen. Ein Set-Objekt stellt einen Satz von Werten dar, ein Map-Objekt dagegen stellt eine Zuordnung von Schlüsseln zu Werten dar. Verschiedene typisierte Arrays erleichtern Operationen auf Arrays von Bytes und anderen binären Daten. Der RegExp-Datentyp repräsentiert Textmuster und ermöglicht ausgeklügelte Vergleichs-, Such- und Ersetzungsoperationen auf Zeichenketten. Der Date-Datentyp stellt Datum und Uhrzeit dar und unterstützt rudimentäre Rechenoperationen mit Datumswerten. Der Fehlertyp Error und dessen Untertypen stellen Fehler dar, die beim Ausführen von JavaScript-Code auftreten können. Alle diese Typen werden in Kapitel 11 behandelt.

JavaScript unterscheidet sich von statischeren Sprachen dadurch, dass Funktionen und Klassen nicht nur Teil der Sprachsyntax, sondern selbst Werte sind, die von JavaScript-Programmen manipuliert werden können. Wie alle nicht primitiven JavaScript-Werte sind Funktionen und Klassen eine spezialisierte Art von Objekt. Sie werden ausführlich in den Kapiteln 8 und 9 behandelt.

Der JavaScript-Interpreter führt im Rahmen der Speicherverwaltung eine automatische Speicherbereinigung (Garbage Collection) durch. Als JavaScript-Programmierer muss man sich in der Regel also nicht um das Löschen oder die Deallokation von Objekten oder anderen Werten kümmern. Kann auf einen Wert nicht mehr zugegriffen werden – wenn ein Programm keine Möglichkeit mehr hat, darauf zu verweisen –, weiß der Interpreter, dass der Wert nicht mehr verwendet werden kann, und gibt automatisch den durch den Wert belegten Speicher frei. (Als JavaScript-Programmierer muss man darauf achten, dass Werte nicht versehentlich länger als nötig für das Programm »erreichbar« bleiben und der belegte Speicher deshalb nicht freigegeben werden kann.)

JavaScript unterstützt einen objektorientierten Programmierstil. Lax formuliert, bedeutet dies, dass man keine global definierten Funktionen nutzt, die auf Werten unterschiedlicher Typen operieren, sondern dass die Datentypen selbst Methoden für die Arbeit mit Werten definieren. Wollen wir beispielsweise die Elemente in einem Array a sortieren, übergeben wir a nicht an irgendeine sort()-Funktion. Stattdessen rufen wir die sort()-Methode von a auf:

a.sort(); // Die objektorientierte Version von sort(a).

Die Definition von Methoden wird in Kapitel 9 behandelt. Technisch gesehen, besitzen nur JavaScript-Objekte Methoden. Zahlen, Zeichenfolgen, boolesche Werte und Symbolwerte verhalten sich jedoch ebenfalls so, als besäßen sie Methoden. In JavaScript sind null und undefined die einzigen Werte, auf denen keine Methoden aufgerufen werden können.

Die Objekttypen von JavaScript sind veränderbar, die primitiven Typen sind unveränderbar. Der Wert eines veränderbaren Typs ist mutabel: Ein JavaScript-Programm kann die Werte von Objekteigenschaften und Array-Elementen ändern. Zahlen, boolesche Werte, Symbole, null und undefined sind unveränderbar – es ergäbe nicht einmal Sinn, von der Änderung des Werts einer Zahl zu sprechen. Man könnte Strings als Arrays von Zeichen betrachten und deshalb vielleicht erwarten, dass sie veränderbar seien. Strings sind in JavaScript aber unveränderbar: Sie können auf die Zeichen an einer beliebigen Position einer Zeichenfolge zugreifen, sie aber nicht verändern. Die Unterschiede zwischen veränderbaren und unveränderbaren Werten werden genauer untersucht in 3.8.

JavaScript wandelt Werte großzügig von einem Typ in einen anderen Typ um. Übergeben Sie zum Beispiel einem Programm, das einen String erwartet, eine Zahl, wandelt es diese Zahl automatisch für Sie in einen String um. Und geben Sie einen nicht booleschen Wert an einer Stelle an, an der ein boolescher Wert erwartet wird, führt JavaScript die erforderliche Typumwandlung durch. Die Regeln für die Wertumwandlung werden in 3.9 erläutert. Die toleranten Konvertierungsregeln für Werte wirken sich in JavaScript auf die Definition der Gleichheit aus – in 3.9.1 wird beschrieben, welche Typumwandlungen der Gleichheitsoperator == durchführt. (In der Praxis wird auf die Verwendung des als veraltet betrachteten nichtstrikten Gleichheitsoperators == jedoch zugunsten des strikten Gleichheitsoperators === verzichtet, der keine Typumwandlungen vornimmt. Weitere Informationen zu beiden Operatoren finden Sie unter 4.9.1.)

Konstanten und Variablen ermöglichen Ihnen, Namen zu verwenden, um in Ihren Programmen auf Werte zu verweisen. Konstanten werden mit const deklariert und Variablen mit let (oder in älterem JavaScript-Code mit var). JavaScript-Konstanten und -Variablen sind untypisiert: In den Deklarationen wird nicht angegeben, welche Art von Werten zugewiesen werden sollen. Die Variablendeklaration und -zuweisung wird in 3.10 behandelt.

Wie Sie bereits an dieser langen Einführung sehen können, ist dies ein umfassendes Kapitel, in dem viele grundlegende Details zur Darstellung und Manipulation von Daten in JavaScript erklärt werden. Legen wir direkt los mit den Einzelheiten zu Zahlen und Text.

JavaScript  –  Das Handbuch für die Praxis

Подняться наверх