2012-08-04 11 views
5

Lets sagen, ich habe eine Reihe von Namen für eine Variable:Wie dynamisch JavaScript-Variablen aus einem Array erstellen?

var varNames = new Array("name1","name2","name3"); 

Wie kann ich var name1, var name2 und var name3 von nur Schleifen des varNames Array zu erstellen?

+2

Es ist in der Regel keine gute Idee, globale Variablen dynamisch zu erstellen. Vielleicht könnten Sie, wenn Sie das größere Bild beschreiben, einen besseren Ansatz vorschlagen. – JJJ

Antwort

6

Dies wird globale Variablen erstellen (in dem globalen Namensraum, das heißt window).

var varNames = ["name1","name2","name3"]; 
for (var i=0;i<varNames.length;i+=1){ 
    window[varNames[i]] = 0; 
} 
name1; //=> 0 

Da Verwendung von globalen Variablen schlechte Praxis betrachtet wird, könnten Sie Variablen innerhalb eines custum-Objekt erstellen:

var myVariables = {} 
    ,varNames = ["name1","name2","name3"]; 
for (var i=0;i<varNames.length;i+=1){ 
    myVariables[varNames[i]] = 0; 
} 
myVariables.name1; //=> 0 

bearbeiten 2017

Mit es≥6:

const [v1, v2, v3] = ["name1","name2","name3"]; 
console.log(v1); // => name1 
+0

Gibt es einen Grund, warum Sie verwenden i + = 1 anstelle von i ++? – Danejir

+1

Es ist von Douglas Crockford genommen. Er empfiehlt, den '' ++ Operator um Verwechslungen zu vermeiden wie: 'var i = 5; var j = i ++;/* j ist jetzt 5 und i ist 6 */ var k = ++ i;/* k ist jetzt 7 und ich ist 7 */' – KooiInc

2

Sie können es wie folgt. Ich habe die Warnungen hinzugefügt, um zu beweisen, dass Sie für diese Variablen einen Wert festlegen können.

var varNames = new Array("name1","name2","name3"); 
for(var i = 0; i < varNames.length; i++) { 
    window[varNames[i]] = i; 
} 
alert("name1: " + name1); 
alert("name2: " + name2); 
alert("name3: " + name3); 
1

Die direkte Antwort auf Ihre Frage wäre - Sie können es eval mit tun:

var varNames = new Array("name1","name2","name3"); 

for (var i=0; i<varNames.length; i++) { 
    var varName = varNames[i]; 
    eval("var "+varName); // would be "var name1" 
} 

Bitte beachten Sie aber, dies und es in der Regel schlechte Praxis betrachtet wird, ist keine Rechtfertigung für eval für einen solchen Fall mit . Beachten Sie auch, dass es häufiger ist folgenden Stil zu schaffen Array mit:

var varNames = ["name1", "name2", "name3"]; 
Verwandte Themen