我试图在javascript中动态引用变量
我试图调用的变量是amtgc1#(其中#从1-7变化)
我使用while语句循环,而while语句中计数变量的值对应于我试图调用的变量的最后一位数。
例如:
var inc=3;
var step=0;
while(step < inc){
var dataString = dataString + amtgc1#;
var step = step+1;
}
其中#基于变量“step”的值。我该怎么做呢?任何帮助表示赞赏!谢谢!
答案 0 :(得分:8)
不是将amtgc1[1-7]
定义为7个不同的变量,而是将它们实例化为数组。所以你的服务器代码会发出:
var amtgc1 = [<what used to be amtgc11>,<what used to be amtgc12>, ...insert the rest here...];
然后,您可以使用数组语法在循环中引用它们:
var dataString = dataString + amtgc1[step];
答案 1 :(得分:5)
你可以做到这一点(afaik)的唯一方法是将所有amtgc1#vars抛出一个对象,例如:
myVars = {
amtgc1: 1234,
amtgc2: 12345,
amtgc3: 123456,
amtgc4: 1234567
};
然后你可以像
一样引用它myVars["amtgc" + step];
答案 2 :(得分:2)
怎么样:
var dataString = dataString + eval('amtgc1' + step);
答案 3 :(得分:0)
未经测试,但看不出为什么你不能这样做......
$('#amtgc1' + step).whatever();
答案 4 :(得分:0)
如果您的amtgc1*
变量被定义为对象的属性,则可以按名称引用它们。假设它们在全局范围内声明,它们将成为window
对象的成员。
var inc=7;
var step=0;
while(step < inc){
var dataString = dataString + window['amtgc1'+(step+1)];
var step = step+1;
}
如果它们被定义在不同的范围内(在一个函数内)但不属于任何其他对象,那么你会被eval
困住,这通常被认为是错误的。
另外,万岁for
循环!
var inc=7;
for ( var step=0; step < inc; step++ ){
var dataString = dataString + window['amtgc1'+(step+1)];
}
答案 5 :(得分:0)
我已经构建了一种方法,您可以使用对象来存储键值来解决此问题,其中键将是对任务的引用,值将是操作(函数),您可以在内部使用if循环检查当前任务并触发操作。
如果您想将动态连接字符串与&#34;变量&#34;进行比较,则应使用eval()函数。
/* store all tasks references in a key value, where key will be
* the task reference and value will be action that the task will
* Execute
*/
var storeAllTasksRefer = {
amtgc11:function(){ alert("executing task amtgc11"); },
amtgc112:function(){ alert("executing task amtgc112"); },
"amtgc1123":"amtgc1123"
// add more tasks here...
};
var inc = 7;
var step = 1;
var dataString = 'amtgc1';
while(step <= inc){
var dataString = dataString + step;
//alert(dataString); // check its name;
step = step+1;
// check if it is my var
if( dataString == 'amtgc112' ){
// here I will reference my task
storeAllTasksRefer.amtgc112();
}// end if
/* you can also compare dynamically using the eval() function */
if('amtgc1123' == eval('storeAllTasksRefer.'+dataString)){
alert("This is my task: "+ eval('storeAllTasksRefer.'+dataString));
} // end this if
} // end while
答案 6 :(得分:0)
确实不建议使用eval()
,但这样可行。否则,根据范围,您可以引用大多数内容,例如JavaScript中的对象。也就是说,这里有你可以做的例子。
全球范围
var MyGlobalVar = 'secret message';
var dynamicVarName = 'MyGlobalVar';
console.log(window.[dynamicVarName]);
功能范围
function x() {
this.df = 'secret';
console.log(this['df']);
}
x();