繁体   English   中英

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

[英]Programmatically setting the name of a variable

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

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

...

variable_100 = 100;

我试过了

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

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

以下是一些方法:

方法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:使用数组

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

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

这样做:

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

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

现场测试案例

你最好使用数组

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

之后,您可以使用变量[1],变量[2]等访问这些值。

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

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

使用数组:

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是表达式。 解释器认为您正在尝试添加两个变量,而不是连接变量名和字符串。 表达式不能位于赋值操作的左侧。

为什么不使用这样的数组呢?

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

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

alert( variable_50 );

alert( variable_34 );

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

global[variable] = 'hello'

console.log(variable) - > hello

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM