Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript";变量";:如何基于另一个变量分配变量?_Javascript_Variables - Fatal编程技术网

Javascript";变量";:如何基于另一个变量分配变量?

Javascript";变量";:如何基于另一个变量分配变量?,javascript,variables,Javascript,Variables,我有一组Javascript中的全局计数器变量: var counter_0 = 0; var counter_1 = 0; var counter_2 = 0; 等 然后我有一个Javascript函数,它接受映射到这些全局计数器的“索引”号。在这个函数中,我需要使用传递给函数的“index”值读写这些全局计数器 我希望它如何工作的示例,但当然根本不起作用: function process(index) { // do some processing // if 'ind

我有一组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
    }
}
我希望我要完成的事情是明确的。如果没有,我会尽力澄清。谢谢

编辑澄清:


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

在我看来像是一个数组,或者我遗漏了什么

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 */ 
   }
}
eval()
javascript函数将允许您完成此任务。然而,人们普遍不赞成这样做。你的问题没有明确排除数组。数组肯定更适合您描述的模式

function process(index) {
    // do some processing
    var counter;
    eval('counter = ++counter_'+index);
    if (counter == 13)
    {
        // do other stuff
    }
}
确保索引真的是一个整数,否则会造成混乱

编辑:其他人指出,如果可以,应该使用数组。但是,如果您被命名的全局变量所困扰,那么上述方法将起作用

编辑:bobince指出,您可以使用window对象按名称访问全局文件,因此以下内容值得称赞:

function process(index) {
    // do some processing
    var counter = ++window['counter_' + index];
    if (counter == 13)
    {
        // do other stuff
    }
}
其他答案是“不要使用
eval()
”,但不是为什么。以下是来自以下方面的解释:

不要使用eval

eval()是一个危险的函数,它 执行它与 调用方的权限。如果你跑 eval(),该字符串可以是 受恶意方影响,您可能 最终在服务器上运行恶意代码 具有以下权限的用户计算机: 你的网页/分机

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


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