javascript - 如何解决比较变量时它在 JavaScript 中变为未定义的问题?

标签 javascript html undefined nan

我正在创建一个小游戏来测试我的 JavaScript 技能。出于某种原因,我无法弄清楚,当我比较变量 iron 和变量 drill 时,drill 变得未定义,并列为 NaN 在我的网页中。

我在 repl.it 上使用 Javascript 和 HTML。我觉得这可能是我的 If 语句的问题,但如果这是问题的根源,我不确定如何解决它们。此外,变量 irondrill 默认设置为 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 中变为未定义的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57660656/

相关文章:

jquery - 通过单击添加类时淡入 1000

C++ undefined reference 类构造函数

javascript - Azure Active Directory B2C 与 native react

html - 为什么我的幻灯片背景图像不显示?

javascript - 使用上下文时 RequireJs 忽略配置

angularjs - 生产服务器上缺少 html 元素

javascript - Express 没有得到查询 Mongodb 的其他函数的返回

linux - 无法使用 makefile 进行编译 - 未定义对 `boost::re_detail 的引用

javascript - QuillJS : Cannot register a custom class attributor

javascript - 是否可以将带有大量 javascript 的动态 HTML 页面转换为没有 javascript 的页面?