Javascript";变量";:如何基于另一个变量分配变量?
我有一组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
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]将检索全局变量,就像任何其他属性访问一样。