为什么在这种情况下算术运算会返回NaN?

时间:2018-09-22 11:31:38

标签: javascript dom

通过JS的实践,我制作了一个非常简单的应用程序,该应用程序计算了您在咖啡馆支付的小费多少。当我制定一个公式时,它完全可以算出我在解决问题时遇到的技巧,而我无法解释。如果我试图用一个公式计算所有数值,那么我的结果就是NaN,但是如果我做了几个新变量,我的结果就会是我所期望的。这是代码:

window.onload = function() {
  const bill = document.getElementById('bill');
  const company = document.getElementById('people');
  const radioButtons = document.getElementsByName('service');
  const calcButton = document.getElementById('calculator');
  const resultDiv = document.getElementById('result-div');

  function calcTips() {
    let result;
    let srv;
    let billValue = parseFloat(bill.value);
    let comValue = parseFloat(company.value);
    for(let i = 0; i < radioButtons.length; i++) {
      if(radioButtons[i].checked === true) {
        switch(i) {
          case 0:
            svr = 30;
            break;
          case 1:
            svr = 20;
            break;
          case 2:
            svr = 15;
            break;
          case 3:
            svr = 10;
            break;
          case 4:
            svr = 0;
            break;
        }
      }
    }
    // arithmetic operations
    let temp = billValue / 100 * svr;
    let temp2 = billValue + temp;
    result = temp2 / comValue;
    console.log(result);
  }

  calcButton.addEventListener('click', calcTips);
}

该代码运行良好,但是如果我制定一个公式:

result = (billValue + (billValue / 100 * svr)) / comValue;

返回NaN,你能解释一下为什么吗?

2 个答案:

答案 0 :(得分:1)

您声明:

let srv;

但是这样使用:

let temp = billValue / 100 * svr;
                              ^-------------

对于Fix更改,例如:

let srv;更改为let svr;

答案 1 :(得分:0)

NAN表示该值不是数字 因为方程中的某些变量不是数字 您没有为svr分配任何数字值,因此默认值为null,这将导致等式中的NaN