759 Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hey,

kurze Frage:

warum ergibt folgender Beispielcode

[code]
    var tmp    = new String();
    var cnt, i = new Number();
   
    cnt = 0;
    tmp = "";
   
    for(i = 0; i < elem.length; i++){
     if(i < elem.indexOf(" ")){
      tmp[cnt] += elem[i];
      alert(tmp[cnt]);
      cnt++;
[/code]

den Wert undefined?

Grüße in die Nacht

6 Antworten

0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo,

hast du elem irgendwo deklariert und auch initialisiert?

Außerdem fallen mit zwei geschweifte Klammern auf, die nicht geschlossen werden. Ich nehme aber an, dass die im nicht gezeigten Teil des Codes geschlossen werden..

Gruß
computerschrat
0 Punkte
Beantwortet von
Hey,

sry, ich habe ja auch was vergessen. Das Ganze sieht so aus:

[code]
   function createNew(elem, attr = 0){
    var tmp    = new String();
    var cnt, i = new Number();
   
    cnt = 0;
    tmp = "";
   
    for(i = 0; i < elem.length; i++){
     if(i < elem.indexOf(" ")){
      tmp[i] += elem[i];
      alert(tmp[i]);
      cnt++;
     }
    }
   }
[/code]

Als Beispiel: elem hat den Wert "Hallo du da". Wenn ich alert(elem[i])
angebe, gibt er mir auch alle Zeichen aus.

Sowohl bei tmp[cnt] als auch bei tmp[i] erscheint undefined. Dabei ist
tmp meines Verständnisses nach aber sowohl deklariert
(var tmp = new String()) als auch deklariert (tmp = "").
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo,

wenn du tmp als leeren String initialisierst, dann kannst du nicht auf tmp[i] für i>0  zugreifen, weil das nicht existiert. Das tust du aber mit deiner Schleife, in der du elem zeichenweise nach tmo kopierst.

Ich habe zwar mit JS keine nennenswerte Erfahrung, aber ich denke, hier solltest du den String über concat erweitern.

Gruß
computerschrat
0 Punkte
Beantwortet von
Also
var tmp = "";
alert(tmp);
gibt bei mir eine Leere Alert Box aus. Ohne meckern ohne alles.
Sollte also reichen.
0 Punkte
Beantwortet von computerschrat Profi (32.2k Punkte)
Hallo,

das ist auch korrekt, der alert gibt die Variable innerhalb ihres definierten Bereichs aus. Und wenn der String leer ist, wird auch ein leerer String ausgegeben.
Wenn du aber auf das n+1 te Element eines Strings zugreifen möchtest, der nur n-Elemente hat, dann gibt es einen Fehler.
Der String hat nach der Zuweisung tmp="" die Länge 0 und du schreibst mit deiner Kopierschleife auf tmp[1]
Um Zeichen zu einen String hinzuzufügen, musst du die concat Funktion verwenden.

Gruß
computerschrat
0 Punkte
Beantwortet von
Hey,

danke für die Antworten.

Nach meinem Verständnis ist die Konstruktion tmp = "" auch eine
Definition. Sie sagt einfach nur, dass tmp einen leeren Initialisierungswert
hat.

Daher sollte doch tmp = elem[i] (i = 0) keinen Fehler ausgeben.

Habe meine Problem jetzt mittels tmp = elem.split(",") gelöst. Funktioniert
einwandfrei.
...