猿问

Javascript“变量”:如何基于另一个变量分配变量?

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


var counter_0 = 0;

var counter_1 = 0;

var counter_2 = 0;

等等


然后,我有了一个Javascript函数,该函数接受一个映射到这些全局计数器的“索引”数字。在此函数内部,我需要使用传递给该函数的“索引”值来读写这些全局计数器。


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


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

    }

}

我希望我要实现的目标是明确的。如果没有,我会尽力澄清。谢谢。


编辑说明:


我不是要增加计数器的名称,而是要增加计数器包含的值。


一只甜甜圈
浏览 386回答 3
3回答

拉风的咖菲猫

在我看来像是一个数组,还是我错过了什么?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 */    }}

慕码人8056858

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()javascript函数可以让你做到这一点。但是,人们通常对此并不满意。您的问题没有明确排除数组。数组绝对适合您所描述的模式。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答