我正在创建一个小游戏来测试我的JavaScript技能。由于某些原因,我无法弄清楚,当我比较变量iron
和变量drill
时,drill
变得不确定,并在我的网页中列为NaN
。
我在repl.it上使用Javascript和HTML。我觉得这可能与我的If
语句有关,但是如果这是问题的根源,我不确定如何解决它们。同样,变量iron
和drill
设置为默认值0
。
if (iron < drillPrice) {
alert("Not enough iron");
}
if (iron >= drillPrice) {
drill = drill + 1;
tempDrills = drill
iron = iron - drillPrice;
document.getElementById('drillsOwned').innerHTML = drill;
iron = Math.round(iron * 10) / 10;
document.getElementById('ironOwned').innerHTML = iron;
drillPrice = Math.floor(100 * Math.pow(1.1, drill));
document.getElementById("drillPrice").innerHTML = drillPrice;
}
}
完整的摘录在这里:https://repl.it/@Munix/factory
如果变量
iron
大于变量drillPrice
,则期望的输出,应将drill
增大一个,在这种情况下,应使drill
等于1
。实际发生的是drill
变为undefined
。如果变量iron
小于drillPrice
,则应显示测试Not enough iron
,而不要触摸变量drill
。实际发生的是显示测试Not enough iron
,但将drill
设置为undefined
。 最佳答案
问题是代码的这一部分:
function randomEvent() {
var event = Math.random();
event = Math.round(event * 10);
if (event <= 9) {
document.getElementById("event").innerHTML = "No event today!";
drill = tempDrills
}
if (event == 10) {
var eventFlavor = 'You have iron deficiency! 1/2 iron from drills for the rest of the day!';
document.getElementById("event").innerHTML = eventFlavor;
var tempDrills = drill;
drill = drill / 2;
}
}
我们在这里看到的是一个如何在javascript中创建变量的示例:
var tempDrills = drill;
变量的声明被提升到函数的顶部,因此基本上看起来像这样:
function randomEvent() {
var event = Math.random();
var tempDrills;
...
}
因此,该变量将被提升,并且不会将其设置为
drill
的值,除非您有幸在启动时将十分之一的值滚动。因此,tempDrills
是其他9种情况下未定义值的局部变量,解释了将drill
设置回tempDrills
后的行为。解决方案很简单,就是删除
var
关键字,所以您改用全局变量。然后,它按我的预期工作。关于javascript - 如何解决比较变量时JavaScript中 undefined variable 的问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57660656/