Kernobjekte und Datentypen

Einführung

Die Kernobjekte in JavaScript repräsentieren in erster Linie die grundlegenden Datentypen, z.B. Zahlen oder Zeichenketten (sogenannte Strings). Datentypen sind in JavaScript objektorientiert gelöst: Jedes Objekt ist eine Instanz einer bestimmten Konstruktorfunktion. Von dessen Prototypen erbt die Instanz Eigenschaften und Methoden.

...

Die Mutter aller Objekte: Object

Alle Objekte stammen von einem obersten Kernobjekt ab: Object. Jedes Objekt ist demnach zumindest vom allgemeinen Typ Object, darüber hinaus kann es einem spezifischeren Typ angehören (z.B. String).

Ein Objekt vom Typ Object ist bloß ein Container für weitere Daten [... doppelt]

Object-Objekte als Zuordnungslisten (Hashes)

Als grundlegender Typ hinter allen anderen Typen interessiert uns Object nur wenig. Diejenigen Objekte, die nur von Object abstammen, sind jedoch nützlich, wenn man in JavaScript eine Zuordnungsliste benötigt oder andere, zusammenhängende Objekte geordnet abspeichern will. Eine einfache Anwendung von Object könnte so aussehen:

var adresse = new Object();
adresse.name = "Max Mustermann";
adresse.straße = "Königsallee 56";
adresse.stadt = "Frankfurt";

Solche Objekte sind für die Strukturierung von Daten oder sogar JavaScript-Programmen selbst äußerst nützlich. Denn in solchen Objekten lassen sich nicht nur Zeichenketten oder Zahlen unter bestimmten Namen abspeichern, sondern auch beispielsweise Funktionsobjekte. Und sie lassen sich beliebig verschachteln.

Object-Literale

Das obige Beispiel verwendet die Langschreibweise new Object() zum Erzeugen eines Object-Objektes. Anschließend werden dem leeren Objekt Eigenschaften hinzugefügt. Es gibt allerdings auch eine kurze Literalschreibweise, die ungemein einfacher und verbreiteter ist. Um ein solches Object-Literal zu notieren, gibt es einen bestimmten Ausdruck: Er fängt mit einer öffnenden geschweiften Klammer an und endet mit einer schließenden. Dazwischen werden die Eigenschaften mit Name und Wert aufgelistet. Zwischen Name und Wert steht ein Doppelpunkt, zwischen den Eigenschaften ein Komma. Das Schema sieht demnach so aus:

{
   name1 : wert3,
   name2 : wert2,
   name3 : wert3
}

Die Anzahl der notierten Eigenschaften ist nicht begrenzt. Zu beachten ist, dass hinter der letzten Zuweisung kein Komma notiert wird.

Das erste Beispiel sieht in der Literalschreibweise so aus:

var adresse = {
   name : "Max Mustermann",
   straße : "Königsallee 56",
   stadt : "Frankfurt"
};

Dies erzeugt haargenau das gleiche Objekt wie die Langschreibweise.

String, Number und Boolean

String, Number und Boolean sind die wichtigsten einfachen Datentypen. Sie haben einen direkt und eindeutig darstellbaren Wert.

var zahl = 1.23;
var zeichenkette = "Hallo Welt!";
var boolean = true;

Diese Anweisungen definieren eine String-, eine Number- und eine Boolean-Variable mithilfe der jeweiligen Literalschreibweise.

...

Objekte und primitive Typen

Zwar verhalten sich alle Werte in JavaScript in gewissen Situationen wie Objekte, aber strenggenommen gibt es eine Unterscheidung zwischen vollwertigen Objekten und sogenannten einfachen Werten, im der englischen Fachsprache Primitive Values, kurz Primitives genannt.

Diese Doppelung betrifft die eben behandelten Boolean-, Number- und String-Werte. Diese können nämlich entweder als Primitive oder als vollwertiges Objekt notiert werden:

Dieser Unterschied macht sich an zwei Stellen bemerkbar:

Referenzen und Kopien

Primitives werden als Kopie an Funktionen übergeben, während Objekte als Referenzen auf dieselbe Speicherstelle (in anderen Programmiersprachen »Zeiger« genannt) übergeben werden.

Gegeben ist folgender Fall: Sie notieren ein Objekt als Variable. Dieses Objekt übergeben Sie einer Funktion und in der Funktion nehmen Sie Änderungen am Objekt vor, fügen ihm z.B. eine Eigenschaft hinzu.

Wenn das Objekt als Referenz übergeben wird, dann haben Sie nach dem Funktionsaufruf auf das geänderte Objekt Zugriff. Denn an beiden Stellen, innerhalb und außerhalb der Funktion, haben Sie Zugriff auf ein und dasselbe Objekt.

Wenn das Objekt als Primitive übergeben wird, dann haben Änderungen daran keine Auswirkung auf die Variable im ursprünglichen Kontext – es sei denn, die Funktion gibt einen Primitive zurück und Sie arbeiten mit dem Rückgabewert der Funktion weiter.

Gleichheit und Identität

Der Vergleichsoperator == ergibt beim Vergleich zweier vollwertiger Objekte nur dann true, wenn es sich um ein und dasselbe Objekt handelt. Er verhält sich in dem Fall wie der Identitätsoperator ===. Zwei Objekte können also niemals gleich sein, es sei denn, sie sind identisch.

Der Vergleich new String("Hallo Welt") == new String("Hallo Welt") ergibt false, denn die beiden String-Objekte sind nicht identisch. Bei Primitives hingegen gibt es eine Gleichheit unabhängig von der Identität: "Hallo Welt" == "Hallo Welt" ergibt erwartungsgemäß true.

Empfehlung

Sofern Sie keinen besonderen Grund haben, sollten Sie Boolean-, Number- und String-Werte stets als Primitives, also mit der Literalschreibweise notieren.

...

Function (Funktionsobjekte)

Funktionen sind JavaScript-Objekte, die vom Konstruktor Function abstammen. Ein JavaScript-Programm ist üblicherweise in verschiedene Funktionen unterteilt, die einander aufrufen. Eine Funktion gruppiert zusammengehörige Anweisungen und löst eine gewisse isolierbare Teilaufgabe. Anstatt denselben oder sehr ähnlichen Code immer wieder zu notieren, notiert man stattdessen eine Funktion, die mehrfach aufgerufen werden kann. Durch sogenannte Parameter können ihr variable Informationen bei jedem Aufruf mitgeteilt werden.

Näheres zu Funktionen finden Sie im eigenen Abschnitt Funktionen.

Array: Geordnete Listen

Array sind numerische geordnete Listen mit anderen Objekten. Immer wenn mehrere gleichförmige Objekte in einer bestimmten Abfolge gespeichert werden sollen, sind Arrays die passende Struktur.

var städte = [ "Berlin", "Köln", "Hamburg", "München", "Frankfurt" ];
var lottozahlen = [ 4, 12, 23, 33, 42, 44 ];
var mitarbeiter = [
   {
      name : "Margarethe",
      geburtsdatum : new Date(1972, 4, 12),
      durchwahl : 401
   },
   {
      name : "Michael",
      geburtsdatum : new Date(1962, 11, 2),
      durchwahl : 402
   },
   {
      name : "Monika",
      geburtsdatum : new Date(1958, 5, 25),
      durchwahl : 403
   }
];

RegExp: Reguläre Ausdrücke

Mit regulären Ausdrücken lassen sich Muster für Zeichenabfolgen notieren, mit deren Hilfe sich Texte durchsuchen und automatisierte Ersetzungen vormehmen lassen. Mit einem regulären Ausdruck kann beispielsweise geprüft werden, ob ein String in einer bestimmten Weise aufgebaut ist und somit einer Konvention entspricht.

Wenn ein Formularfeld nur eine ganze Zahl enthalten darf, dann lässt sich mit einem regulären Ausdruck testen, ob das Feld tatsächlich nur Ziffern enthält. Enthält es noch andere Zeichen oder einen Komma-Wert, so kann der Wert vor dem Absenden des Formulars automatisch korrigiert werden.

Reguläre Ausdrücke sind eigene Objekte vom Typ RegExp. Um ein solches Objekt zu erzeugen, können wir einen RegExp-Literal notieren oder new RegExp() aufrufen. ...

Date: Datumsobjekte

...

Math: Mathematische Hilfsmethoden

...

Objekttypen außerhalb des Kerns

DOM-Knoten, Elementobjekte, ...