如何在javascript中动态引用变量

问题描述 投票:0回答:8

我正在尝试在 javascript 中动态引用变量

我尝试调用的变量是 amtgc1#(其中 # 的范围为 1-7)

我正在使用 while 语句进行循环,并且 while 语句中计数变量的值与我尝试调用的变量的最后一位数字相对应。

例如:

            var inc=3;
            var step=0;
            while(step < inc){
                var dataString = dataString + amtgc1#;
                var step = step+1;
            }

其中#基于变量“step”的值。我该怎么做呢?任何帮助表示赞赏!谢谢!!

javascript variables dynamic
8个回答
10
投票

不要将

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

5
投票

执行此操作的唯一方法(据我所知)是将所有 amtgc1# 变量放入一个对象中,例如:

myVars = {
  amtgc1: 1234,
  amtgc2: 12345,
  amtgc3: 123456,
  amtgc4: 1234567
};

然后你可以像这样引用它

myVars["amtgc" + step];

4
投票

怎么样:

var dataString = dataString + eval('amtgc1' + step);

1
投票

确实,并不总是推荐使用

eval()
,但那是可行的。否则,根据范围,您可以引用大多数内容,例如 JavaScript 中的对象。也就是说,以下是您可以执行的操作的示例。

全球范围

var MyGlobalVar = 'secret message';
var dynamicVarName = 'MyGlobalVar';
console.log(window.[dynamicVarName]);

功能范围

function x() {
  this.df = 'secret';
  console.log(this['df']);
}
x();

0
投票

未经测试,但不明白为什么你不能这样做......

$('#amtgc1' + step).whatever();


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

0
投票

我已经构建了一种方法,您可以使用对象来存储键值来解决这个问题,其中键是对任务的引用,值是操作(函数),您可以在循环内使用 if 来检查当前任务并触发操作。

如果您想将动态连接的字符串与“变量”进行比较,您应该使用 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

这是实例:http://jsfiddle.net/danhdds/e757v8ph/

eval()函数参考:http://www.w3schools.com/jsref/jsref_eval.asp


0
投票

此外,如果您使用 Web 组件并使用 JS 类,那么您可以通过变量(字段)的名称动态检索变量(字段),因为“this”是一个对象:

testVar = 'test';

let varName = 'testVar';

console.log(this[varName]);
© www.soinside.com 2019 - 2024. All rights reserved.