421 Stimmen

Dynamische Variablennamen in JavaScript verwenden

In PHP können Sie erstaunliche/abscheuliche Dinge wie diese tun:

$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1

Gibt es eine Möglichkeit, so etwas mit Javascript zu machen?

Wenn ich z.B. eine var name = 'the name of the variable'; kann ich einen Verweis auf die Variable mit dem Namen name ?

29voto

amitchd Punkte 955
a = 'varname';
str = a+' = '+'123';
eval(str)
alert(varname);

Versuchen Sie dies...

21voto

David Newcomb Punkte 10288

In Javascript können Sie die Tatsache nutzen, dass alle Eigenschaften Schlüssel-Wert-Paare sind. jAndy hat dies bereits erwähnt, aber ich glaube nicht, dass seine Antwort zeigt, wie es ausgenutzt werden kann.

Normalerweise versuchen Sie nicht, eine Variable zu erstellen, um einen Variablennamen zu speichern, sondern Sie versuchen, Variablennamen zu erzeugen und sie dann zu verwenden. PHP macht das mit $$var Notation, aber Javascript braucht es nicht, weil Eigenschaftsschlüssel mit Array-Schlüsseln austauschbar sind.

var id = "abc";
var mine = {};
mine[id] = 123;
console.log(mine.abc);

gibt 123. Normalerweise wollen Sie die Variable konstruieren, weshalb es die Umleitung gibt, so dass Sie es auch andersherum machen können.

var mine = {};
mine.abc = 123;
console.log(mine["a"+"bc"]);

10voto

Brent Barbata Punkte 3501

Wenn Sie kein globales Objekt wie window oder global (node) verwenden wollen, können Sie etwas wie folgt versuchen:

var obj = {};
obj['whatever'] = 'There\'s no need to store even more stuff in a global object.';

console.log(obj['whatever']);

7voto

pery mimon Punkte 6536

2019

TL;DR

  • eval Operator kann String-Ausdrücke in dem Kontext ausführen, den er aufgerufen hat, und Variablen aus diesem Kontext zurückgeben;
  • literal object Theoretisch kann man das durch Schreiben erreichen: {[varName]} aber sie ist per Definition blockiert.

Ich stoße also auf diese Frage und alle hier spielen nur herum, ohne eine wirkliche Lösung zu bringen. Aber @Axel Heider hat einen guten Ansatz.

Die Lösung lautet eval . fast die meisten vergessen Betreiber. (denken die meisten ist with() )

eval Operator kann einen Ausdruck dynamisch in dem Kontext ausführen, in dem er aufgerufen wurde. und das Ergebnis dieses Ausdrucks zurückgeben. Wir können dies verwenden, um den Wert einer Variablen dynamisch im Kontext der Funktion zurückzugeben.

Beispiel:

function exmaple1(){
   var a = 1, b = 2, default = 3;
   var name = 'a';
   return eval(name)
}

example1() // return 1

function example2(option){
  var a = 1, b = 2, defaultValue = 3;

  switch(option){
    case 'a': name = 'a'; break;
    case 'b': name = 'b'; break;
    default: name = 'defaultValue';
  }
  return eval (name);
}

example2('a') // return 1
example2('b') // return 2
example2() // return 3

Beachten Sie, dass ich immer explizit den Ausdruck eval laufen wird. Um unnötige Überraschungen im Code zu vermeiden. eval ist sehr stark Aber ich bin sicher, das wissen Sie bereits.

Übrigens, wenn es legal wäre, könnten wir die literal object um den Variablennamen und den Wert zu erfassen, aber wir können keine berechneten Eigenschaftsnamen und Eigenschaftswerte kombinieren, die Kurzschrift ist leider ungültig

functopn example( varName ){
    var var1 = 'foo', var2 ='bar'

    var capture = {[varName]}

}

example('var1') //trow 'Uncaught SyntaxError: Unexpected token }`

6voto

Talha Punkte 1376

Ich musste mehrere FormData im Handumdrehen zeichnen und die Objektmethode funktionierte gut

var forms = {}

Dann in meinen Schleifen, wo immer ich brauchte, um ein Formular Daten erstellen ich verwendet

forms["formdata"+counter]=new FormData();
forms["formdata"+counter].append(var_name, var_value);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X