当前位置:  开发笔记 > 编程语言 > 正文

Javascript"变量变量":如何根据另一个变量分配变量?

如何解决《Javascript"变量变量":如何根据另一个变量分配变量?》经验,为你挑选了3个好方法。

我在Javascript中有一组全局计数器变量:

var counter_0 = 0;
var counter_1 = 0;
var counter_2 = 0;

等等

然后我有一个Javascript函数接受一个映射到那些全局计数器的'索引'号.在这个函数中,我需要使用传递给函数的'index'值来读取和写入这些全局计数器.

我希望它如何工作的示例,但当然根本不起作用:

function process(index) {
    // do some processing

    // if 'index' == 0, then this would be incrementing the counter_0 global variable
    ++counter_+index; 

    if (counter_+index == 13)
    {
        // do other stuff
    }
}

我希望我想要完成的事情是清楚的.如果不是,我会尽力澄清.谢谢.

编辑澄清:

我不是试图增加计数器的名称,而是增加计数器包含的值.



1> KooiInc..:

对我来说看起来像一个阵列,或者我错过了什么?

var counters = [0,0,0];

function process(index) {
   ++counters[index]; 
      /* or ++counters[index]+index, not sure what you want to do */
   if (counters[index] === 13) { 
      /* do stuff */ 
   }
}



2> Bennett McEl..:
function process(index) {
    // do some processing
    var counter;
    eval('counter = ++counter_'+index);
    if (counter == 13)
    {
        // do other stuff
    }
}

确保索引确实是一个整数,否则可能会发生混乱.

编辑:其他人已经指出,如果可以,你应该使用数组.但是如果你坚持使用命名的全局变量,那么上面的方法就可以了.

编辑:bobince指出您可以使用窗口对象按名称访问全局变量,因此值得对以下内容进行任何归功:

function process(index) {
    // do some processing
    var counter = ++window['counter_' + index];
    if (counter == 13)
    {
        // do other stuff
    }
}

其他答案都说"不要用eval()",但不是为什么.以下是MDC的解释:

不要使用eval!

eval()是一个危险的函数,它使用调用者的特权执行它传递的代码.如果您使用可能受恶意方影响的字符串运行eval(),您最终可能会使用您的网页/扩展程序的权限在用户的计算机上运行恶意代码.

对于常见用例,有eval()的安全替代方案.


即使卡在命名变量中,您也不需要也不应该使用eval().window ['counter _'+ index]将检索全局变量,就像任何其他属性访问一样.

3> Ken Browning..:

eval()javascript函数可以让你做到这一点.然而,它通常不赞成.您的问题没有明确排除数组.数组绝对更适合您所描述的模式.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有