TheSepp: Bei Schleifendurchlauf jedesmal neue Variable verwenden

Hallo,

Ich möchte folgendes machen: Bei jedem Durchlauf einer Schleife soll diese automatisch (via alert()) den Wert einer neuen Variable anzeigen. Die Variablen sind nach dem Muster Inhalt1, Inhalt2, ... Ich hoffe, ihr versteht, wie ich das meine.

Hier mein Lösungsansatz:

function blabla () {  
	var Inhalt1 = "Das ist ein Text ...";  
	var Inhalt2 = "... hier noch einer ...";  
	var Inhalt3 = "... und das ist der Letzte.";  
	for (i = 1; i <= 3; i++) {  
		var fgh = ['Inhalt' + i];  
		alert(fgh);  
	}  
}

Aber iwie funktioniert das nicht, denn in den alerts bekomme ich nur die Namen der Variablen, aber nicht deren Wert, den ich ja eigentlich aufrufen möchte.

Wie kann ich es also anfangen, dass ich bei der Abfrage direkt den Wert bekomme? (Oder ist das mit JavaScript überhaupt möglich, dass man Variablen auf diese Weise aufrufen kann?)

  1. Hallo TheSepp,

    für Dein Problem solltest Du vll besser ein http://de.selfhtml.org/javascript/objekte/array.htm@title=Array nutzen. Das kann genau das, was Du suchst.

    Mit freundlichem Gruß
    Micha

    --
    simple JavaScript Spiele: Snake, MineSweeper, Sudoku oder Tetris
    1. für Dein Problem solltest Du vll besser ein http://de.selfhtml.org/javascript/objekte/array.htm@title=Array nutzen. Das kann genau das, was Du suchst.

      Ja hast recht. Ich hab' gerade den Wald vor lauter Bäumen nicht gesehen. Also so sieht's jetzt aus:

      function blabla () {  
      	var Inhalt1 = "Das ist ein Text ...";  
      	var Inhalt2 = "... hier noch einer ...";  
      	var Inhalt3 = "... und das ist der Letzte.";  
      	var yxc = new Array(Inhalt1, Inhalt2, Inhalt3);  
      	var i = 0;  
      	for (i; i <= (yxc.length - 1); i++) {  
      		var fgh = yxc[i];  
      		alert(fgh);  
      	}  
      }
      

      Danke nochmal für den Hinweis.

      1. Hallo TheSepp,

        kein Problem aber ich hätte er an folgendes gedacht:

        var Inhalt = [];  
        Inhalt[0] = "Das ist ein Text ...";  
        Inhalt[1] = "... hier noch einer ...";  
        Inhalt[2] = "... und das ist der Letzte.";  
        
        

        Also kein (zusätzliches) Pseudoarray "yxc", sondern die direkte Datenhaltung im Inhalts-Feld.

        Mit freundlichem Gruß
        Micha

        --
        simple JavaScript Spiele: Snake, MineSweeper, Sudoku oder Tetris
      2. Oder auch so:

        function blabla () {  
          
        	var i, Inhalt =  
        			[  
        			"Das ist ein Text ...",  
        			"... hier noch einer ...",  
        			"... und das ist der Letzte."  
        			]  
        	;  
        	for ( i=0; i in Inhalt; alert(Inhalt[i++]) ){}  
        }  
        
        

        Bin halt ein Fan von Abkürzungen...

        Mit Abbruchbedingungen wie "i in Inhalt" muss man beim Durchlaufen von Arrays allerdings aufpassen: Manche Frameworks mögen das nicht.
        Und sobald ein Array-Element 'undefined' ist, bricht die for-Schleife ab. Wenn man das nicht will, sollte man sicherstellen, dass für alle Array-Elemente 0...n immer !!Inhalt[n]===true gilt.

        Oder vorsichtshalber doch die klassische Abbruchbedingung i<Inhalt.length; verwenden.

        Gruß, Don P

        1. Mit Abbruchbedingungen wie "i in Inhalt" muss man beim Durchlaufen von Arrays allerdings aufpassen: Manche Frameworks mögen das nicht.

          Wieso? Inwiefern?

          Mathias

          1. Hallo,

            Wieso? Inwiefern?

            Hmm... gute Frage. Habe mal sowas gelesen, aber damit ist anscheinend nicht wirklich die Abbruchbedingung gemeint, sondern die Verwendung der for...in Schleife in der Form for(i in Inhalt){alert(Inhalt[i])};, um beim Beispiel zu bleiben.

            Es heißt in der Doku zu prototype 1.6, Kapitel 4:
            "Many JavaScript authors have been misled into using the for…in JavaScript construct to loop over array elements. This kind of code just won’t work with Prototype."

            Das liegt daran, dass so eine for..in Schleife auch alle Eigenschaften des Arrays durchläuft, z.B. auch die über Array.prototype dazugefügten.

            Zum Beispiel wird mit

              
            var i, a=['a','b','c'];  
            a.neu='d'; // Neue Eigenschaft des Arrays  
            for(i in a){alert(a[i])}  
            
            

            auch 'd' ausgegeben, obwohl das in keinem Array-Element vorkommt.

            Als Abbruchbedingung ist "i in Inhalt" aber anscheinend wirklich ok, solange man sich bewusst ist, dass die Schleife halt beim ersten undefinierten Array-Element abbricht, also nicht zwangsläufig alle Elemente durchlaufen werden. Das mag nicht immer erwünscht sein.

            Aber das muss ich dir, @molily, ja sicher nicht alles erklären, gelle...

            Gruß, Don P