Javascript 访问连接的变量名的值 问题描述:

Javascript 访问连接的变量名的值 问题描述:,javascript,html,variables,concatenation,Javascript,Html,Variables,Concatenation,我试图简化一些代码,除了我显然只是创建一个字符串,而不是访问相应变量的值。如何将'total.'+animal转换为一个变量,然后我可以访问该变量以动态地将结果分配给div 代码: JS: function tallyAnimals(animal) { total_animal++; if (animal == "dog") { total_dog++; } if (animal == "cat") { total_cat++; } if (animal

我试图简化一些代码,除了我显然只是创建一个字符串,而不是访问相应变量的值。如何将
'total.'+animal
转换为一个变量,然后我可以访问该变量以动态地将结果分配给div

代码: JS:

function tallyAnimals(animal) {
    total_animal++;
    if (animal == "dog")  { total_dog++;  }
    if (animal == "cat")  { total_cat++;  }
    if (animal == "bird") { total_bird++; }
    if (animal == "fish") { total_fish++; }

    //The problem line
    $('#' + animal).html('total_' + animal);
}
<div id="animals">

    <div id="dog">0</div>
    <div id="cat">0</div>
    <div id="bird">0</div>
    <div id="fish">0</div>

</div>
HTML:

function tallyAnimals(animal) {
    total_animal++;
    if (animal == "dog")  { total_dog++;  }
    if (animal == "cat")  { total_cat++;  }
    if (animal == "bird") { total_bird++; }
    if (animal == "fish") { total_fish++; }

    //The problem line
    $('#' + animal).html('total_' + animal);
}
<div id="animals">

    <div id="dog">0</div>
    <div id="cat">0</div>
    <div id="bird">0</div>
    <div id="fish">0</div>

</div>

0
0
0
0

您可以使用eval()函数。以下是解决方案:

function tallyAnimals(animal) {
    total_animal++;
    if (animal == "dog")  { total_dog++;  }
    if (animal == "cat")  { total_cat++;  }
    if (animal == "bird") { total_bird++; }
    if (animal == "fish") { total_fish++; }

    $('#' + animal).html(eval('total_' + animal));
}
评估是为这种工作做的!通过执行以下操作,还可以使用较少的行:

function tallyAnimals(animal) {
    total_animal++;
    eval("total_"+animal."++");
    $('#' + animal).html(eval('total_' + animal));
}

由于“total_uuz”+动物看起来是全球性的,没有评估:

var function tallyAnimals(animal) {
    total_animal++;
    if (animal == "dog")  { total_dog++;  }
    if (animal == "cat")  { total_cat++;  }
    if (animal == "bird") { total_bird++; }
    if (animal == "fish") { total_fish++; }

    //The problem line
    $('#' + animal).html(window['total_' + animal]);
}

should work
编辑:

理想情况下,您不应该使用全局变量,而应该将“total”和动物变量附加到精确的范围

例:

函数tallyAnimal之外的文件中的某个位置:

var totals = {
   dog:0,
   cat:0,
   ...
}
这样你就可以写作了

$('#' + animal).html(totals[animal]);

谢谢你的回复。我被告知要不惜一切代价避免使用eval()。这是罕见的例外之一吗?使用eval构建变量可能是危险的,因为它可能被恶意使用。。。你可以在这里读更多关于它的内容:我明白了。我认为,除非我完全彻底地理解它,否则我可能应该回避它。虽然你声称这正是它的用途,所以激起了我的好奇心。:-)再次感谢。与eval()相反,是否更倾向于以这种方式使用全局变量?哪个练习更好?评估是邪恶的!我的观点是,除非您有一个特定的用例,否则不应该使用eval,因为您可以根据变量的范围动态解析变量名。我并不是说使用全局变量是好的,但是我比eval好。