frankx: Arraywert als Variablenname

Hellihello,

in PHP kann ich mit Variablen erzeugen mit:

  
$var_Namen=array("Name1","Name2");  
foreach ($var_Namen as $Name) {  
    $$Name="irgendeinwert"; //Achtung das doppelt Dollar ist Absicht!  
}  
//dann existiert:  
echo $Name1;  
echo $Name2;  

wie kann ich das Analog in Javascript machen?
Ich würde gerne Dokumentenelement mit Name1, Name2 etc erzeugen:

  
DivNamen = new Array("Name1","Name2");  
  
//so zuordnen dass nacher ist  
  
Name1 //Referenz auf DivElement1  
Name2 //Referenz auf DivElement2  
  

so gehts natürlich nicht:

  
  
for (i in DivNamen) {  
       DivNamen[i]=document.createElement("div");  
// ....  

frankx

  1. Hallo frankx,

    wie kann ich das Analog in Javascript machen?

    eval().

    Viele Grüße aus Freiburg,
    Marian

    --
    Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
    1. Hallo Marian,

      wie kann ich das Analog in Javascript machen?

      eval().

      pfui, wie kannst du nur ... ?
      Die Verwendung von eval() ist fast immer vermeidbar!

      frankx, jede globale Variable ist in Javascript eigentlich eine Eigenschaft des window-Objekts und kann deshalb auch als solche angesprochen werden:

      var ups = 40;  
      alert(window["ups"]);   // zeigt an: 40
      

      Dieses Beispiel verwendet einen bekannten, konstanten Variablennamen. Es geht natürlich auch dynamisch:

      var varname = "hmpf";  
      window[varname] = 40;  
      alert(hmpf);            // zeigt wieder an: 40
      

      So kannst du relativ einfach Variablen anlegen, deren Namen erst zur Laufzeit bekannt werden, ja, deren Namen sogar wiederum in einer Variablen übergeben werden können. Also ein echtes Gegenstück zu den "variablen Variablen" mit dem $$-Präfix in PHP.

      So long,
       Martin

      --
      Lache, und die Welt wird mit dir lachen.
      Schnarche, und du schläfst allein.
      1. Hellihello Martin,

        ah, warum pfui?

        Ich hatte gerade ausprobiert:

          
            window.onload=function() {  
            DivNamen = new Array("Name1","Name2");  
            for (i in DivNamen) {  
                  Platzhalter=document.createElement("div");  
             Platzhalter.id=DivNamen[i];  
             Platzhalter.innerHTML=DivNamen[i];  
             document.body.appendChild(Platzhalter);  
             eval(DivNamen[i]+"=Platzhalter;");  
            }  
            //geht  
            alert(document.getElementById("Name1").innerHTML);  
            //geht auch  
            alert(Name2.innerHTML);  
            }  
        
        

        statt:

          
        eval(DivNamen[i]+"=Platzhalter;");  
        
        

        also besser:

          
        window[DivNamen[i]]=Platzhalter;  
        
        

        ?

        Dank
        frankx

        1. Hallo,

          ah, warum pfui?

          weil eval() nahezu beliebigen Code ausführt. Oft wird auch noch der Fehler gemacht, in das Argument von eval() direkt oder indirekt Benutzereingaben einzubauen, mit denen man dann durch geschickte Eingaben das ganze Script ins Straucheln bringen kann, oder Reaktionen provozieren, die der Autor nie im Traum erwartet hat.

          statt:
          eval(DivNamen[i]+"=Platzhalter;");

          also besser:
          window[DivNamen[i]]=Platzhalter;

          ?

          Genau. Dann hast du eine bessere Kontrolle über den Programmablauf.

          Ciao,
           Martin

          --
          Die meisten Menschen werden früher oder später durch Computer ersetzt.
          Für manche würde aber auch schon ein einfacher Taschenrechner genügen.
      2. Hallo Martin,

        eval().

        pfui, wie kannst du nur ... ?
        Die Verwendung von eval() ist fast immer vermeidbar!

        In PHP hätte ich auch die variablen Variablen genommen, aber die gibts ja bei JavaScript nicht.

        frankx, jede globale Variable ist in Javascript eigentlich eine Eigenschaft des window-Objekts und kann deshalb auch als solche angesprochen werden:

        Das wusste ich noch nicht.

        Viele Grüße aus Freiburg,
        Marian

        --
        Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
        <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->