2012-08-04 12 views
5

Diciamo che ho un array di nomi per una variabile:Come creare dinamicamente le variabili javascript da un array?

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

Come posso creare var name1, var name2 e var name3 semplicemente scorrendo la matrice varNames?

+2

Di solito non è una buona idea per creare le variabili globali in modo dinamico. Forse se hai descritto l'immagine più grande, qualcuno potrebbe essere in grado di suggerire un approccio migliore. – JJJ

risposta

6

Ciò creerà le variabili globali (nello spazio dei nomi globale, ad esempio window).

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

Dato che l'utilizzo di variabili globali è considerata una cattiva pratica, è possibile creare le variabili all'interno di un oggetto custum:

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

Edit 2017

Utilizzando es≥6:

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

C'è un motivo per cui usi i + = 1 invece di i ++? – Danejir

+1

È preso da Douglas Crockford. Si sconsiglia di usare l'operatore '++' per evitare confusione come: 'var i = 5; var j = i ++;/* j è ora 5 e i è 6 */ var k = ++ i;/* k è ora 7 e i è 7 */' – KooiInc

2

È possibile farlo come segue. Ho aggiunto gli avvisi per dimostrare che è possibile impostare un valore per tali variabili.

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

La risposta diretta alla sua domanda sarebbe - è possibile farlo usando eval:

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" 
} 

Si prega di notare se questa è considerata una cattiva pratica e di solito non v'è alcuna giustificazione per l'uso di eval per tale caso . Si noti inoltre che è più comune per creare array usando lo stile seguente:

var varNames = ["name1", "name2", "name3"]; 
Problemi correlati