我正在用 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>
这也是问题的屏幕截图。
如有任何帮助,我们将不胜感激。
在我看来,你实际上从未用整数值初始化 num1 和 num2
parseInt(null) //always returns NaN
这显然是因为您混淆了与 null 的比较和 分配给 null
if(num1 = null)
试试这个:
if(num1===null)