如何动态创建变量名?

时间:2012-08-08 01:09:38

标签: javascript

我需要创建基于用户定义数字的javascript对象。因此,如果用户定义了20,那么我需要创建20个变量。

var interval_1=0, interval_2=0, interval_3=0, interval_4=0, interval_5=0... interval_20=0;

我该怎么做才能动态创建对象的名称?

for (i=0; i<=interval; i++){
    var interval_ + i.toString() = i;
}

4 个答案:

答案 0 :(得分:4)

嗯,使用数组?

for( i=0; i<=count; i++) array[i] = i;

答案 1 :(得分:3)

使用数组:

var i, count, interval = [];

// user defines count, 20 for example
count = 20;

for (i = 0; i < count; i++) {
    interval.push(i);
}

// interval[0] === 0
// interval[19] === 19
// interval.length === 20

注意,这会将索引从0开始并向上计数 - 1.除非你从1开始,否则不要使用i&lt; = count。

这是一个jsFiddle来说明。点击F12在大多数浏览器中打开开发工具并查看控制台,或将console.log()更改为alert()。

链接:http://jsfiddle.net/willslab/CapBN/1/

或者,您可以为每个值设置一个具有属性的对象:

var i, count, intervals = {};

count = 20;

for (i = 0; i < count; i++) {
    intervals["interval_" + i] = i;
}

//intervals.interval_0 === 0
//intervals.interval_19 === 19)

链接:http://jsfiddle.net/willslab/EBjx7/2/

答案 2 :(得分:2)

for (i=0; i<=20; i++){
    window["interval_" + i.toString()] = i;
}

答案 3 :(得分:1)

Javascript变量可以通过以下方式创建:

  1. 变量声明,例如var x;
  2. 为未声明的变量分配值,例如y = 'foo';
  3. 形式参数列表中的标识符,例如function bar(x, y, z);
  4. 使用 eval ,例如eval( 'var x = 4');
  5. 如果所有其他方法都失败了,你想要说5个变量,你可以这样做:

    var s = [];
    var i = 5;
    while (i--) {
      s[i] = 'a' + i;
    }
    
    eval('var ' + s.join(',') + ';');
    
    alert(a0); // shows undefined
    

    如果未定义 a0 ,则最后一步会引发参考错误。

    当然,您现在遇到的问题是如何访问它们。如果将它们创建为全局变量,则可以使用:

    globalObj['a' + i];
    

    其中 globalObj 通常是 window ,但由于无法访问其变量对象,因此无法访问函数变量。

    所以通常的解决方案是把东西放到数组或对象中,你可以迭代这些属性来找到你不知道名字的东西。