User Input als Variable-Name übernehmen?
Hey,
(& wenn, wie) ist sowas möglich?
let userInput = prompt('Lieblingsfarbe','Rot, Grün, Gelb, Blau...');
//User tippt 'rot' ein
var rot = ...;
Sodass quasi der Input des Users (bsp. rot) als Name der Variable übernommen wird?
Also daraufhin eine Variable mit dem Namen 'rot' erstellt wird?
Wie ist das möglich, ich bastle schon seit fast ner Stunde an einer Lösung. Finde aber diese Lösung nicht.
Danke im vorraus. :)
4 Antworten
Mit Eval( string ) wird ein String als aktiver Code ausgeführt.
Eval ('var '+ Input +'=irgendwas')
Eval() ist eine "gefährliche" Funktion, egal was ein Nutzer als String eingibt/übergibt es wird ausgeführt.
Als Programmierer sollte man diese Funktion meiden wie die Pest, denn damit öffnet man den eigenen Code den Launen des Nutzers.
Mir erschließt sich nicht, weshalb Du mit einem unvorhersehbaren Variablennamen arbeiten willst? Ich ahne zwar was Dir vorschwebt😏, ...lass es...
Entscheide mit einem Switch-Statement
Nein, du ahnst es nicht.
Es war einfach eine Blitzidee.
Ich wollte es einfach mal ausprobieren.
Und ich finde das wenn ich den UserInput als Variablennahme nehme kann ja nix anderes ausgeführt werden als: Variable XXX erstellen, Fehler weil Leerzeichen oder Zahlen am Anfang des Inputs etc was man aber mit Statements vermeiden kann.
Solange der Anfang nur VAR ist & das was in der variable bzw. dem Array ist schon geschrieben ist. können die ja schreiben was se wollen. Passieren tut nur eins. Die Variable wird erstellt, oder eben aber auch nicht.
Wozu brauchst man das denn? oO
Das ist gefährlich! Und verdammt schlechter Programmierstil.
Der User könnte damit andere Variablen überschreiben und dadurch Fehlfunktionen in deinem Programm herbeirufen. Wenn Serverkommunikation im Spiel ist und dieses Fehlverhalten serverseitig dann nicht richtig abgefangen wird, wird es richtig mies....
Wenn du es wirklich brauchst, solltest du deinen Code dringendst überarbeiten.
- var color = userInput; //oder direkt prompt();
- Mit der Usereingabe in der Variable color weiterarbeiten
Mir fält wirklich absolut kein Anwendungsfall ein, wo es sinnvoll ist, den User den Variablenname, den er nie zu Gesicht bekommen wird, bestimmen zu lassen,
Hey,
warum willst du das die Variable dann so heisst und nicht einfach den Wert des Inputs hat? Das die Variable so heisst geht meiner Meinung nach nicht und ist auch nicht der Sinn.
Mfg Jannick (L1nd)
Aber wieso muss denn der Variablen Name der Input des User sein?
Es sollte doch reichen, wenn der Wert einer Variable den Wert des Inputs hat
Beispiel:
const = (nameVonArray, String1, String2, String3){
nameVonArray = prompt("Name")
String1 = prompt("Inhalt");
String2 = prompt("Inhalt");
String3 = prompt("Inhalt");
//Wenn alles passt und nix leer ist (if(String1==null){}...
eval("var "+nameVonArray+'=['+String1+","+String2+","+String3+"]");
}
Das klingt alles nach ziemlichem Humbug der in eval() endet.
Warum willst du das überhaupt erreichen?
Wie unter JanMarcel's Antwort schon geschrieben. :)
Damit ich zb. per Funktion eine Variable erstellen kann. Und dann den User Input nehme und diesen als Variablenname nehmen kann.
Und funktioniert das vielleicht nicht irgendwie mit Eval?
Hä? Ich versteh es nicht. Was speicherst du eigentlich dann in der Variable?
Du hast in dem obrigen Beispiel dann eine Variable Rot und da steht dann nix drin.
Beispiel:
const = (nameVonArray, String1, String2, String3){
nameVonArray = prompt("Name")
String1 = prompt("Inhalt");
String2 = prompt("Inhalt");
String3 = prompt("Inhalt");
//Wenn alles passt und nix leer ist (if(String1==null){}...
eval("var "+nameVonArray+'=['+String1+","+String2+","+String3+"]");
}
Ich würd ja das Konzept dahinter nochmal überdenken. Eigentlich sind Variablennamen nicht von irgendwelchen Userinputs abhängig. Und mit eval würd ich sowieso überhaupt nicht anfangen. Das bringt dir nur Sicherheitslücken in den Code.
Ist mir klar,
nur ... weshalb frage ich denn dann hier?
Ich mach das auch nicht aus Humbug. Ich frage damit ich eine Antwort darauf bzw. einen Hinweis oder eine Lösung bekomme, nicht das mir hier Stundenlang gesagt wird das ich mir das Konzept denn noch einmal überdenken sollte. Ich brauche Hilfe, Hinweise oder gar besser eine Lösung zu meinem Problem.
(Wenn das etwas unhöflich rüberkommt tut es mir leid)
Na dann...
let nameVariable = "MeineVariable";
eval(nameVariable+" = 123");
console.log(MeineVariable); // 123
Damit ich zb. per Funktion eine Variable erstellen kann. Und dann den User Input nehme und diesen als Variablenname nehmen kann.
Und funktioniert das vielleicht nicht irgendwie mit Eval?