Как динамически создавать переменные JavaScript из массива?

допустим у меня есть массив имен для переменной:

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

как создать var name1, var name2 и var name3 просто петля через varNames массив?

3 ответов


Это позволит создать глобальные переменные (в глобальном пространстве имен, т. е. window).

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

поскольку использование глобальных переменных считается плохой практикой, вы можете создавать переменные в объекте custum:

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

изменить 2017

использование es≥6:

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

вы можете сделать это следующим образом. Я добавил оповещения, чтобы доказать, что вы можете установить значение для этих переменных.

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);

прямой ответ на ваш вопрос будет - вы можете сделать это с помощью 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"
}

обратите внимание, хотя это считается плохой практикой, и обычно нет никаких оснований для использования eval для такого случая. Также обратите внимание, что чаще всего создается массив, используя следующий стиль:

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