【问题标题】:How to dynamically create javascript variables from an array?如何从数组动态创建 javascript 变量?
【发布时间】:2012-08-02 04:21:26
【问题描述】:

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

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

如何通过循环遍历varNames 数组来创建var name1var name2var name3

【问题讨论】:

  • 动态创建全局变量通常不是一个好主意。如果您描述了更大的图景,也许有人可以提出更好的方法。

标签: javascript arrays variables dynamic


【解决方案1】:

这将创建全局变量(在全局命名空间中,即window)。

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

由于使用全局变量被认为是不好的做法,您可以在自定义对象中创建变量:

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

【讨论】:

  • 你使用 i+=1 而不是 i++ 有什么原因吗?
  • 取自 Douglas Crockford。他建议不要使用 ++ 运算符以避免混淆,例如:var i = 5; var j = i++; /* j is now 5 and i is 6 */ var k = ++i; /* k is now 7 and i is 7 */
  • 您的 2017 年新增内容不再回答原始问题。了解这种语法仍然很有用,但那是为了别的 :)
【解决方案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);

【讨论】:

    【解决方案3】:

    您的问题的直接答案是 - 您可以使用 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"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2011-02-23
      • 2022-06-25
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      相关资源
      最近更新 更多