为什么我的 JavaScript 计算器不等于?

问题描述 投票:0回答:1

我正在用 JS 制作一个计算器,但它总是给我 NaN。我不明白为什么。每当我单击 equal 时,它都会给我 NaN。我可以看到我单击的数字在日志中,但是,当我将它们等同时,它显示 NaN (op) Nan。尽管之前已经确认了被点击的数字。

我尝试了多种方法,包括在不同的地方添加和删除

console.log
,将
parseInt
更改为
parseFloat
,然后返回
parseInt
,并查看其他解决方案,但没有一个真正适合我。 这是我的 JS,还有我的 HTML,以防万一。

var $screen = $("#screen");
var $number = $(".number");
var $clearnum = $(".clearnum");
var num1 = null;
var num2 = null;
var currentNumber = 1;
var op = $("#operator");
var answer = (num1, op, num2);
var click = 0;

function findAnswer() {
  num1 = parseInt(num1);
  num2 = parseInt(num2);
  console.log(num1, op, num2);
  if (op == "+") {
    answer = num1 + num2;
  }
  if (op == "-") {
    answer = num1 - num2;
  }
  if (op == "*") {
    answer = num1 * num2;
  }
  if (op == "/") {
    answer = num1 / num2;
  }
  num1 = answer;
  num2 = null;
  currentNumber = 1;
}

function more() {
  if (click > 8) {
    click = click - 5;
  }
  if (currentNumber == 2) {
    findAnswer();
    $screen.empty();
    $screen.append(num1);
  }
  currentNumber = 2;
}

function returnPractice() {
  if (click > 8) {
    return;
  }

  alert("This will never show if click is greater than 8.");
}

$number.on('click', function() {
  click++;
  returnPractice();
  var numberPressed = $(this).html();
  $screen.append(numberPressed);
  console.log(numberPressed);

  if (currentNumber == 1) {
    if (num1 = null) {
      num1 = numberPressed;
    } else {
      num1 = num1 + numberPressed;
    }
  }
  if (currentNumber == 2) {
    if (num2 == null) {
      num2 = numberPressed;
    } else {
      num2 = num2 + numberPressed;
    }
  }
});

$("#plus").on('click', function() {
  more();
  $screen.append("+");
  op = "+"
  currentNumber++;
});

$("#minus").on('click', function() {
  more();
  $screen.append("-");
  op = "-"
  currentNumber++;
});

$("#times").on('click', function() {
  more();
  $screen.append("*");
  op = "*"
  currentNumber++;
});

$("#divided").on('click', function() {
  more();
  $screen.append("/");
  op = "/"
  currentNumber++;
});

$clearnum.on('click', function() {
  $screen.empty();
  num1 = null;
  num2 = null;
  currentNumber = 1;
  click = 0;
});

$("#equal").on('click', function() {
  {
    $screen.append("=");
    findAnswer();
    a = answer;
    answer = a.toFixed(1);
    console.log(isNaN("answer"));
    if (click > 8) {
      $screen.empty();
      var answerLength = answer.toString;
      click = answerLength.length;
    }
    $screen.append(answer);
    console.log(answer);
  }
});
<html>

<head>
  <title>Calculator</title>
  <link href="resources/CSS/style.css" rel="stylesheet" type="text/css">
</head>

<body>
  <h1>Calculator</h1>
  <div id="calculator">
    <div id="screen"></div>
    <div id="buttons">
      <div id="numbers">
        <div class="number" id="num1">1</div>
        <div class="number" id="num2">2</div>
        <div class="number" id="num3">3</div>
        <div class="number" id="num4">4</div>
        <div class="number" id="num5">5</div>
        <div class="number" id="num6">6</div>
        <div class="number" id="num7">7</div>
        <div class="number" id="num8">8</div>
        <div class="number" id="num9">9</div>
        <div class="number" id="num0">0</div>
        <div class="equal" id="equal">=</div>
        <div class="clearnum" id="clear">C</div>
      </div>
      <div id="operators">
        <div class="operator" id="plus">+</div>
        <div class="operator" id="minus">-</div>
        <div class="operator" id="times">*</div>
        <div class="operator" id="divided">/</div>
      </div>
    </div>
  </div>
  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  <script type="text/javascript" src="resources/js/script.js"></script>
</body>

</html>

这也是问题的屏幕截图。

我的项目截图

如有任何帮助,我们将不胜感激。

javascript html jquery calculator
1个回答
0
投票

在我看来,你实际上从未用整数值初始化 num1 和 num2

parseInt(null)   //always returns NaN

这显然是因为您混淆了与 null 的比较和 分配给 null

if(num1 = null)

试试这个:

if(num1===null)
© www.soinside.com 2019 - 2024. All rights reserved.