以编程方式设置变量的名称

时间:2011-12-15 19:02:00

标签: javascript

是否有编写以下100个作业的快捷方式?

variable_1 = 1;
variable_2 = 2;
variable_3 = 3;

...

variable_100 = 100;

我试过了

for(var i = 1; i <= 100; i++) {
    variable_ + i = i;
}

但是我收到错误消息“分配中的左侧无效”。有什么想法吗?

8 个答案:

答案 0 :(得分:23)

以下是一些方法:

方法1:使用eval

这是最直接的方法:

for(var i = 1; i <= 100; i++) {
  eval("var variable_" + i + " = " + i);
}
variable_1; // => 1

上述方法的免责声明:我认为此问题不适合使用eval。如果您 使用eval,则绝不允许用户输入进入您eval的内容,或者您​​可以将您的网站打开以应对安全风险。这个错误是人们说eval是邪恶的主要原因。

方法2:使用动态生成的对象属性

这是更多更好的方法:

// If you want these variables to be global, then use `window` (if you're 
// in a browser) instead of your own object.
var obj = {};
for(var i = 1; i <= 100; i++) {
  obj["variable_" + i] = i;
}
obj.variable_1; // => 1

关于使用窗口创建全局变量的注释中的注释:我建议不要这样做,因为这是一种污染全局范围并在不知不觉中踩到变量的快速方法。

方法3:使用数组

David建议使用数组。这是另一个好主意,并且,根据您的尝试,可能是首选:

var arr = [];
for(var i = 1; i <= 100; i++) {
  arr.push(i);
}
arr[0]; // => 1

答案 1 :(得分:6)

这样做:

for(var i = 1; i <= 100; i++) {
    eval("variable_" + i + " = " + i + ";");
}

eval基本上是邪恶的,但为了这个目的,可以使用它。 (reference

Live test case

答案 2 :(得分:5)

最好使用数组

var variable = [];
for (var i=1; i <= 100; i++) {
  variable[i] = i;
}

稍后,您可以使用变量[1],变量[2]等

来访问这些值

答案 3 :(得分:3)

如果这就是为什么不定义对象的数组

var a = new Array();
for(i=0;i<100;i+=)
 a[i] = i;

答案 4 :(得分:3)

使用数组:

var variable = [];

for(var i = 1; i <= 100; i++) {
    variable[i] = i;
}

通过类比,你想要使用数组而不是100个变量,原因与你想要的相同

<div class="variable"></div>
<div class="variable"></div>
<div class="variable"></div>
//and so on

而不是

<div id="variable_1"></div>
<div id="variable_2"></div>
<div id="variable_3"></div>
//and so on
<div id="variable_100"></div>

Invalid left-hand side in assignment

生成此错误是因为variable_ + i是表达式。解释器认为您正在尝试添加两个变量,而不是连接变量名和字符串。表达式不能位于赋值操作的左侧。

答案 5 :(得分:3)

为什么不使用数组呢?

<script language="javascript">
var arrayVar = new Array();

for (var i=0; i<100; i++) {
    arrayVar["variable_" + i] = i;
}
</script>

答案 6 :(得分:1)

for(var i = 1; i <= 100; i++) {
    window["variable_" + i] = i;
}

alert( variable_50 );

alert( variable_34 );

答案 7 :(得分:0)

假设您使用的是浏览器,则可以执行以下操作:

global[variable] = 'hello'

console.log(variable)-> hello