JavaScript计算器显示NaN

JavaScript计算器显示NaN,javascript,html,calculator,Javascript,Html,Calculator,尝试制作一个简单的javascript计算器时遇到问题,按下按钮并激活函数控制台。无法找出问题所在。函数在某种程度上无法正常工作。代码在代码段中 window.onload=function(){ var screen=document.getElementById(“screen”); var keys=document.getElementsByClassName(“keys”); var span=document.getElementsByTagName(“span”); (功能(){

尝试制作一个简单的javascript计算器时遇到问题,按下按钮并激活函数控制台。无法找出问题所在。函数在某种程度上无法正常工作。代码在代码段中

window.onload=function(){
var screen=document.getElementById(“screen”);
var keys=document.getElementsByClassName(“keys”);
var span=document.getElementsByTagName(“span”);
(功能(){
对于(变量i=0;isrnVal.length;i--){
num=srnVal[i]+num;
返回num;
}
对于(var j=num.indexOf+1;j
/*基本重置*/
* {
保证金:0;
填充:0;
框大小:边框框;
/*更好的文本样式*/
字体:粗体14px Arial,无衬线;
}
/*最后为渐变添加一些IE9备用项来完成任务*/
/*一个不错的背景梯度*/
html{
身高:100%;
背景:白色;
背景:径向梯度(圆形,#fff 20%,#ccc);
背景尺寸:封面;
}
/*使用框阴影创建三维效果*/
#计算器{
宽度:325px;
高度:自动;
保证金:100像素自动;
填充:20px 20px 9px;
背景:9dd2ea;
背景:线性梯度(#9dd2ea,#8bceec);
边界半径:3px;
盒影:0px 4px#009de4,0px 10px 15px rgba(0,0,0,0.2);
}
/*顶部*/
.上跨{
浮动:左;
}
/*在屏幕上插入阴影以创建缩进*/
.顶部#屏幕{
高度:40px;
宽度:212px;
浮动:对;
填充:0 10px;
背景:rgba(0,0,0,0.2);
边界半径:3px;
盒影:嵌入0px 4px rgba(0,0,0,0.2);
/*印刷术*/
字号:17px;
线高:40px;
颜色:白色;
文本阴影:1px1px2pRGBA(0,0,0,0.2);
文本对齐:右对齐;
字母间距:1px;
}
/*清除浮动*/
.钥匙,
.顶{
溢出:隐藏;
}
/*将相同的应用于键*/
.钥匙跨度,
.上跨{
浮动:左;
位置:相对位置;
排名:0;
光标:指针;
宽度:66px;
高度:36px;
背景:白色;
边界半径:3px;
盒影:0px4pRGBA(0,0,0,0.2);
利润率:0 7px 11px 0;
颜色:#888;
线高:36px;
文本对齐:居中;
/*防止选择键内的文本*/
用户选择:无;
/*使用css3转换平滑悬停和活动状态*/
过渡:所有0.2秒缓解;
}
/*删除操作员键上的右边距*/
/*不同类型的键(操作符/评估/清除)的样式不同*/
.键span.运算符{
背景#FFF0F5;
右边距:0;
}
.钥匙span.eval{
背景:#f1ff92;
盒影:0px 4px#9da853;
颜色:#888e5f;
}
.上跨{
背景#ff9fa8;
盒影:0px 4px#ff7c87;
颜色:白色;
}
/*一些悬停效果*/
.键跨度:悬停{
背景:#9c89f6;
盒影:0px 4px#6b54d3;
颜色:白色;
}
.键跨度.评估:悬停{
背景#abb850;
盒影:0px 4px#717a33;
颜色:#ffffff;
}
.顶部跨度。清除:悬停{
背景:#f68991;
盒影:0px 4px#d3545d;
颜色:白色;
}
/*通过移除方框阴影并向下移动按键,模拟按键活动状态的“按下”效果*/
.键范围:活动{
盒影:0px 0px#6b54d3;
顶部:4px;
}
.键跨度.评估:激活{
盒影:0px 0px#717a33;
顶部:4px;
}
.顶部跨度。清除:激活{
顶部:4px;
盒影:0px 0px#d3545d;
}

C
7.
8.
9
+
4.
5.
6.
-
1.
2.
3.
/
0
.
=
*

没有更多细节很难回答,但NaN(不是数字)可能意味着您的计算器正试图对非数字执行数字运算

要解决此问题,可以在parseFloat()中包装数字变量,即

变成

var number = parseFloat(document.getElementById("inputBox1").value);
编辑:


根据您提供的代码,我认为将我的修复程序应用于您所做的一些内部HTML拉应可行。

运行计算时,您可能得到的是字符串而不是数字。使用
parseInt()
键入juggle。我还建议使用
console.log()
来准确地计算传递到计算函数中的内容。一旦你知道了这一点,我想解决这个问题会相对容易。

你的问题就在这条线上

screen.innerHTML = opers[srnVal[i]](iteration);
您使用
opers[srnVal[i]]
正确地获取操作函数,但是当它需要一个数组或两个数字时,您在调用它的同时给它一个函数作为参数。您最终尝试使用
未定义的
进行数值运算,这将为您提供
NaN

这是您需要修复的部分

编辑:我真的不知道你想说什么
screen.innerHTML = opers[srnVal[i]](iteration);
if (btnVal == '=') {
    var expression = srnVal.split(''),
            cursor,
            leftHand,
            operation;

    while (expression.length) {
        cursor = expression.shift();
        if (detectOp(cursor)) {
            operation = opers[cursor];
        } else if (operation && leftHand) {
            leftHand = operation([leftHand, parseInt(cursor)]);
            operation = null;
        } else if(leftHand) {
            leftHand = parseInt(leftHand + cursor);
        } else {
            leftHand = parseInt(cursor);
        }
    }
    screen.innerHTML = leftHand;
} else {
    srnVal += btnVal;
    screen.innerHTML += btnVal;
}
screen.innerHTML = opers[srnVal[i]](iteration);
screen.innerHTML = eval(srnVal);
if (btnVal == '=') {
    for (var i = 0; i < srnVal.length; i++) {
        if (detectOp(srnVal[i])) {
            screen.innerHTML = opers[srnVal[i]](iteration);
        }
    }
}
num = num + '';
for (var i = num.indexOf - 1; i > srnVal.length; i--) {
    num = srnVal[i] + num;
    return num;
}