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 ?

407voto

jAndy Punkte 223172

Da es bei ECMA-/Javascript um Folgendes geht Objects y Contexts (die auch eine Art Objekt sind), wird jede Variable in einem solchen gespeichert, das Variabel- (oder im Falle einer Funktion, Aktivierungsobjekt ).

Wenn Sie also Variablen wie diese erstellen:

var a = 1,
    b = 2,
    c = 3;

In der Globaler Geltungsbereich (= KEIN Funktionskontext), schreiben Sie diese Variablen implizit in die Globales Objekt (= window in einem Browser).

Auf diese kann mit Hilfe der Punkt- oder Klammerschreibweise zugegriffen werden:

var name = window.a;

ou

var name = window['a'];

Dies funktioniert nur für das globale Objekt in dieser speziellen Instanz, da die Variables Objekt de la Globales Objekt ist die window Objekt selbst. Innerhalb des Kontexts einer Funktion haben Sie keinen direkten Zugriff auf das Aktivierungsobjekt . Zum Beispiel:

function foobar() {
  this.a = 1;
  this.b = 2;

  var name = window['a']; // === undefined
  console.log(name);
  name = this['a']; // === 1
  console.log(name);
}

new foobar();

new erzeugt eine neue Instanz eines selbst definierten Objekts (Kontext). Ohne new der Anwendungsbereich der Funktion wäre auch global (=Fenster). Dieses Beispiel würde alarmieren undefined y 1 beziehungsweise. Wenn wir ersetzen würden this.a = 1; this.b = 2 mit:

var a = 1,
    b = 2;

Beide Alarmausgaben wären undefiniert. In diesem Szenario würden die Variablen a y b würde im Aktivierungsobjekt von foobar auf die wir nicht zugreifen können (natürlich könnten wir auf diese direkt zugreifen, indem wir a y b ).

168voto

erickb Punkte 5935

eval ist eine Möglichkeit.

var a = 1;
var name = 'a';

document.write(eval(name)); // 1

Warnung: Beachten Sie, dass die Verwendung des eval() Funktion wird nicht empfohlen, wenn Sie nicht wissen, was Sie tun, da sie zahlreiche Sicherheitsprobleme mit sich bringt. Verwenden Sie etwas anderes, wenn es nicht unbedingt notwendig ist. Siehe die MDN-Seite für eval für weitere Informationen.

106voto

JohnP Punkte 48581

Sie können das Fensterobjekt verwenden, um es zu erreichen.

window['myVar']

window enthält einen Verweis auf alle globalen Variablen und Funktionen, die Sie verwenden.

62voto

Terry Lin Punkte 2226

Ich weiß nur nicht, warum eine schlechte Antwort so viele Stimmen erhält. Es ist eine recht einfache Antwort, aber Sie machen sie kompliziert.

// If you want to get article_count
// var article_count = 1000;
var type = 'article';
this[type+'_count'] = 1000;  // in a function we use "this";
alert(article_count);

33voto

Azodium Punkte 1725

Dies ist ein Beispiel:

for(var i=0; i<=3; i++) {
    window['p'+i] = "hello " + i;
}

alert(p0); // hello 0
alert(p1); // hello 1
alert(p2); // hello 2
alert(p3); // hello 3

Ein weiteres Beispiel:

var myVariable = 'coco';
window[myVariable] = 'riko';

alert(coco); // display : riko

Also, der Wert " Kakao " von myVariable wird zu einer Variablen Kakao .

Denn alle Variablen im globalen Bereich sind Eigenschaften des Window-Objekts.

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