JS实现计算器(简易版)_作业1

来源:互联网 发布:淘宝试用申请成功 编辑:程序博客网 时间:2024/05/29 14:27

这个简易版的计算器是没有退格的也只有简单的加减乘除操作。emmmmmmm如果闲下来有空以后或许会尝试继续更新功能。

写的过程也遇见了不少bug,自己尝试着一步一步一一修复了这些bug(所以应该会有更简单的版本。。。)



window.onload = function (){var obtn = document.getElementsByTagName("a");  /* 获取页面中所有的按钮 */var res = document.getElementById("result");/* 获取页面中的显示框(屏幕) */var num,operation; /* 定义num用来保存输入的数据, operation用来保存当前的操作符 */var needClear = true;/* boolean类型 表示是否需要清屏 初始状态设置为true */var markOp = false;/* markOp是用来判断当前操作符里有没有操作,即operation里有没有数据 */var ifEnd  = false;/* 用来判断本次运算是否结束 */for(var i=0;i<obtn.length;i++){obtn[i].onclick = function (){docal(this.innerText);}}/*这一段代码是给所有的按钮都添加一个点击事件,触发docal函数,docal函数里传入的值是按下按钮的对应数据*/function docal(btnValue){/* docal函数是判断按钮里的数据是什么,值不同时做不同的操作 */switch(btnValue){case "+":case "-":case "*":case "/":/*当按下按钮的值是 + - * / 这四个操作符里的一个时执行以下操作*/if(ifEnd == true ){/*判断运算是否结束 如果结束了执行以下操作*/num = parseFloat(res.innerText);operation = btnValue;needClear = true;markOp = true;/* 设置markOp 代表当前键入的是操作符 */ifEnd = false;/*  设置ifEnd 代表开始计算  */break;}else{if(markOp == true ){/*判断操作符里有没有操作 ,如果有执行以下操作*/operation = btnValue ;break;}else{if(num!=null){/*判断num里有没有数据 如果有执行以下操作*/res.innerText = cal(num,parseFloat(res.innerText),operation);/*当num里有数据的时候,那么就把num里的数据和当前屏幕里的数据进行计算 */}num = parseFloat(res.innerText);operation = btnValue ;needClear = true;markOp = true;break;}}case "C":/*当按下此按钮时,设置以下数据*/needClear = true;res.innerText = 0 ;num = null;operation = null;ifEnd = false;break;case "=":if(markOp == true) break; /* 加入这个if是为了避免连续点击多次=符号时出现的bug */res.innerText = cal(num,parseFloat(res.innerText),operation);num = parseFloat(res.innerText);needClear = true;markOp = true;/* “=” 符号也算入markOp  */operation = null;ifEnd = true;/*代表计算结束 */break;/*剩下的情况,即键入的是数字时 */default:markOp = false;/* 设置markOp为false 说明当前键入的不是操作符 */if(needClear == true){res.innerText = btnValue;needClear = false;}else{res.innerText += btnValue ; }break;}}function cal(n1,n2,op){/*cal是用于计算的函数*/switch(op){case "+":return n1 + n2;break;case "-":return n1 - n2;break;case "*":return n1 * n2;break;case "/":return n1 / n2;break;}}}