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好。