为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只甜甜圈 2019-11-21 09:38:56
我在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    }}我希望我要实现的目标是明确的。如果没有,我会尽力澄清。谢谢。编辑说明:我不是要增加计数器的名称,而是要增加计数器包含的值。
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

在我看来像是一个数组,还是我错过了什么?


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 */ 

   }

}


查看完整回答
反对 回复 2019-11-21
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

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()的安全替代方法。


查看完整回答
反对 回复 2019-11-21
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

eval()javascript函数可以让你做到这一点。但是,人们通常对此并不满意。您的问题没有明确排除数组。数组绝对适合您所描述的模式。


查看完整回答
反对 回复 2019-11-21
  • 3 回答
  • 0 关注
  • 385 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号