4.5 Datenspeicherung  
Wenn man viele Variablen braucht oder nicht genau weiß, wie viele Variablen man benötigt, ist das Konzept der Standardvariablen nicht flexibel genug. Beispielsweise sollte man sich bei der Benennung der Variablen schon vorher ein Konzept zurechtlegen, um effizient auf die Variablen zuzugreifen. In diesem Abschnitt werden zwei Möglichkeiten vorgestellt, um mehrere Variablen zu speichern.
4.5.1 Die eval()-Funktion  
Wieder einmal sollen die Monatsnamen gespeichert werden. Anhand der Nummer des Monats soll auf den Monatsnamen zugegriffen werden. Der Variablenname setzt sich aus dem Wort »Monat« und der Zahl zusammen. Die Variablendeklaration sieht also folgendermaßen aus:
var monat1 = "Januar";
var monat2 = "Februar";
var monat3 = "März";
var monat4 = "April";
var monat5 = "Mai";
var monat6 = "Juni";
var monat7 = "Juli";
var monat8 = "August";
var monat9 = "September";
var monat10 = "Oktober";
var monat11 = "November";
var monat12 = "Dezember";
Die Frage lautet nun: Wenn (beispielsweise in einer Variablen) die Monatsnummer vorliegt, wie erhält man dann daraus den Monatsnamen? Natürlich kann man eine Reihe von if-Anweisungen oder die switch-Anweisung verwenden. Schön wäre es jedoch, wenn man direkt den Variablennamen verwenden könnte. Folgender Code funktioniert natürlich nicht wie beabsichtigt:
document.write("monat" + m);
In der JavaScript-Variablen m steht die Monatsnummer, aber obige Zeile würde die Zeichenkette "Monat", verkettet mit der Monatsnummer, ausgeben, also den Namen der Variablen (etwa "monat3" im März), nicht die Variable selbst. JavaScript bietet eine besondere Funktion, die es ermöglicht, Code auszuführen, der als Zeichenkette vorliegt. Diese Funktion heißt eval(). Als Parameter wird eine Zeichenkette übergeben, und eval() führt den JavaScript-Code aus, der in der Zeichenkette steht. Der folgende Aufruf gibt den Wert der Variablen zurück, nicht ihren Namen:
eval("monat" + m);
Will man also den Monatsnamen auf dem Bildschirm ausgeben, kann man folgende Zeile verwenden:
document.write(eval("monat" + m));
Alternativ dazu kann der document.write()-Befehl auch innerhalb der eval()-Klammern geschrieben werden:
eval("document.write(monat" + m + ")");
Steht in der Variablen m beispielsweise der Wert 3, so würde der eval()-Befehl nach dem Einsetzen der Variablen folgendermaßen aussehen:
eval("document.write(monat3)");
Und das ist genau das, was wir erreichen wollten: Der Wert der Variablen monat3 soll ausgegeben werden.
Wenn in der Anweisung, die als Parameter an eval() übergeben wird, Anführungszeichen vorkommen, müssen Sie die herkömmlichen Regeln beachten, also entweder andere Anführungszeichen verwenden oder Anführungszeichen mit einem Backslash entwerten. Oft ist es jedoch sinnvoll, den Aufruf von eval() möglichst weit innen zu platzieren.
document.write("Der Monatsname lautet "+eval("monat" + m));
4.5.2 Arrays  
Die obige Vorgehensweise funktioniert zwar tadellos, ist aber kompliziert, und auch hier werden die Befehle schnell unübersichtlich. In der Praxis werden zumeist so genannte Arrays verwendet. Das sind Variablencontainer, die mehrere Variablen enthalten können. Auf eine einzelne Variable im Container greift man über den Variablennamen und eine Nummer zu. Die Nummer nennt man auch Index. Standardmäßig wird ein Array in JavaScript folgendermaßen definiert:
var a = new Array();
a[1] = "Januar";
a[2] = "Februar";
//usw.
Mit der ersten Zeile, var a = new Array(), wird eine Array-Variable deklariert. Sie können auch Parameter angeben:
|
Mit einem Parameter geben Sie an, wie viele Array-Elemente zunächst vorgesehen sind. (JavaScript erlaubt es aber, Arrays je nach Bedarf kleiner oder größer zu machen.) |
|
Mit mehreren Parametern geben Sie Werte an, die standardmäßig im Array liegen sollen: var a = new Array("Januar", "Februar", "März"); |
Der Index, über den auf ein Array-Element zugegriffen wird, steht in eckigen Klammern. JavaScript-Arrays beginnen, wie in vielen anderen Programmiersprachen und in Java übrigens auch, mit 0. Mit obigem Aufruf würde also a[2] auf März gesetzt. Sie müssten die Anweisung folgendermaßen modifizieren, damit a[3] den Wert "März" enthält:
var a = new Array("", "Januar", "Februar", "März");
Eine ganz besondere Kurzform für Arrays gibt es auch – eckige Klammern:
var a = ["Januar", "Februar", "März"];
Sie geben also nur die eckigen Klammern und die Werte an – das spart immerhin ein paar Zeichen. In Kapitel 18 werden Sie diese Kurzform wiederfinden, unter dem Namen JSON.
|