Arraywert als Variablenname
frankx
- javascript
0 Marian0 Der Martin
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
Hallo frankx,
wie kann ich das Analog in Javascript machen?
Viele Grüße aus Freiburg,
Marian
Hallo Marian,
wie kann ich das Analog in Javascript machen?
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
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
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
Hallo Martin,
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