8

假设我有一个变量的名称数组:

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

我如何创建var name1var name2var name3通过varNames数组循环?

4

3 回答 3

11

这将创建全局变量(在全局命名空间中,即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

[ES20xx]

const myVariables = ['name1', 'name2', 'name3']
  .reduce( (a, v, i) => ({...a, [v]: i + 1 }), {});

console.log(JSON.stringify(myVariables, null, 2));

于 2012-08-04T08:52:55.007 回答
2

您可以按如下方式进行。我添加了警报以证明您可以为这些变量设置值。

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);
于 2012-08-04T08:53:36.693 回答
1

您的问题的直接答案是 - 您可以使用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"];
于 2012-08-04T08:55:13.357 回答