javascript-简单的计算器实现步骤分解(附图)_javascript技巧
1、数学运算“+,-,*,/”的使用
2、输入内容的判断,对于事件对象的来源的判断
效果:

代码:
<script> <BR>//计算对象 <BR>var operateExp={ <BR>'+':function(num1,num2){return num1+num2;}, <BR>'-':function(num1,num2){return num1-num2;}, <BR>'*':function(num1,num2){return num1*num2;}, <BR>'/':function(num1,num2){return num2===0?0:num1/num2;} <BR>} <BR>//计算函数 <BR>var operateNum=function(num1,num2,op){ <BR>if(!(num1&&num2))return; <BR>//保证num1,num2都为数字 <BR>num1=Number(num1); <BR>num2=Number(num2); <BR>//不存在操作符,返回num1; <BR>if(!op)return num1; <BR>//匹配运算公式 <BR>if(!operateExp[op])return 0; <BR>return operateExp[op](num1,num2); <BR>} <BR>//显示面板 <BR>var calculate_outPut=document.getElementById("calculate_outPut"); <BR>//操作面板 <BR>var calculate_num=document.getElementById("calculate_num"); <BR>var result=0;//计算结果 <BR>var isReset=false;//是否重新设置 <BR>var operation;//操作符 <BR>//设置显示屏的值 <BR>function setScreen(num){ <BR>calculate_outPut.value=num; <BR>} <BR>//获取显示屏的值 <BR>function getScreen(){ <BR>return calculate_outPut.value; <BR>} <BR>//添加点击事件 <BR>calculate_num.onclick=function(e){ <BR>var ev = e || window.event; <BR>var target = ev.target || ev.srcElement; <BR>if(target.type=="button"){ <BR>var mark=target.getAttribute("_type");//获取当前点击button的自定义的属性。 <BR>var value=target.value;//获取当前的值 <BR>var num=getScreen();//获取当前框的值 <BR>if(mark==='bs'){//退格键 <BR>if(num==0)return; <BR>var snum=Math.abs(num).toString(); <BR>if(snum.length<2) <BR>setScreen(0); <BR>else <BR>setScreen(num.toString().slice(0,-1)); <BR>} <BR>if(mark==='num'){//数字键 <BR>if(num==='0'||isReset){//有操作符或显示屏为0 <BR>setScreen(value); <BR>isReset=false; <BR>return; <BR>} <BR>setScreen(num.toString().concat(value)); <BR>} <BR>if(mark==="."){//小数点 <BR>var hasPoint=num.toString().indexOf(".")>-1; <BR>if(hasPoint){ <BR>if(isReset){ <BR>setScreen("0"+value); <BR>isReset=false; <BR>return; <BR>} <BR>return; <BR>} <BR>setScreen(num.toString().concat(value)); <BR>} <BR>if(mark==="+/-"){//正负号 <BR>setScreen(-num); <BR>} <BR>if(mark==="op"){//如果点击的是操作符则设计第一个操作数 <BR>if(isReset)return; <BR>isReset=true; <BR>if(!operation){ <BR>result=+num; <BR>operation=value; <BR>return; <BR>} <BR>result=operateNum(result,num,operation); <BR>setScreen(result); <BR>operation=value; <BR>} <BR>if(mark==="cls"){//清零 <BR>result=0; <BR>setScreen(result); <BR>isReset=false; <BR>} <BR>if(mark==="eval"){//计算 <BR>if(!operation)return; <BR>result=operateNum(result,num,operation); <BR>setScreen(result); <BR>operation=null; <BR>isReset=false; <BR>} <BR>} <BR>} <BR></script>
View Code
详细分解:
第一:分支计算部分没有使用switch 语句,使用了名值对的形式。
//计算对象
var operateExp={
'+':function(num1,num2){return num1+num2;},
'-':function(num1,num2){return num1-num2;},
'*':function(num1,num2){return num1*num2;},
'/':function(num1,num2){return num2===0?0:num1/num2;}
}
第二:对象事件的属性的使用,获取点击对象的类型。利用事件冒泡,捕获事件,并对事件进行分类处理。
calculate_num.onclick=function(e){
var ev = e || window.event;
var target = ev.target || ev.srcElement;
if(target.type=="button"){
var mark=target.getAttribute("_type");//获取当前点击button的自定义的属性。
var value=target.value;//获取当前的值
var num=getScreen();//获取当前框的值
if(mark==='bs'){//退格键
if(num==0)return;
var snum=Math.abs(num).toString();
if(snum.lengthsetScreen(0);
else
setScreen(num.toString().slice(0,-1));
}
if(mark==='num'){//数字键
if(num==='0'||isReset){//有操作符或显示屏为0
setScreen(value);
isReset=false;
return;
}
setScreen(num.toString().concat(value));
}
if(mark==="."){//小数点
var hasPoint=num.toString().indexOf(".")>-1;
if(hasPoint){
if(isReset){
setScreen("0"+value);
isReset=false;
return;
}
return;
}
setScreen(num.toString().concat(value));
}
if(mark==="+/-"){//正负号
setScreen(-num);
}
if(mark==="op"){//如果点击的是操作符则设计第一个操作数
if(isReset)return;
isReset=true;
if(!operation){
result=+num;
operation=value;
return;
}
result=operateNum(result,num,operation);
setScreen(result);
operation=value;
}
if(mark==="cls"){//清零
result=0;
setScreen(result);
isReset=false;
}
if(mark==="eval"){//计算
if(!operation)return;
result=operateNum(result,num,operation);
setScreen(result);
operation=null;
isReset=false;
}
}
}
第三:全局变量的使用,利用全局变量对局部操作进度进行控制。(状态控制)
var result=0;//计算结果
var isReset=false;//是否重新设置
var operation;//操作符
第四:对页面操作进行分离,解耦合。
//设置显示屏的值
function setScreen(num){
calculate_outPut.value=num;
}
//获取显示屏的值
function getScreen(){
return calculate_outPut.value;
}
第五:过滤操作数,完成计算。
//计算函数
var operateNum=function(num1,num2,op){
if(!(num1&&num2))return;
//保证num1,num2都为数字
num1=Number(num1);
num2=Number(num2);
//不存在操作符,返回num1;
if(!op)return num1;
//匹配运算公式
if(!operateExp[op])return 0;
return operateExp[op](num1,num2);
}

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题











如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

如何使用WebSocket和JavaScript实现在线预约系统在当今数字化的时代,越来越多的业务和服务都需要提供在线预约功能。而实现一个高效、实时的在线预约系统是至关重要的。本文将介绍如何使用WebSocket和JavaScript来实现一个在线预约系统,并提供具体的代码示例。一、什么是WebSocketWebSocket是一种在单个TCP连接上进行全双工

高效斐波那契数列计算器:PHP实现斐波那契数列(Fibonaccisequence)是一个非常经典的数学问题,其规律是每个数等于前两个数之和,即F(n)=F(n-1)+F(n-2),其中F(0)=0,F(1)=1。在计算斐波那契数列时,可以使用递归方式来实现,但随着数值增大会出现性能问题。因此,本文将介绍如何使用PHP编写一个高效的斐波那

JavaScript和WebSocket:打造高效的实时天气预报系统引言:如今,天气预报的准确性对于日常生活以及决策制定具有重要意义。随着技术的发展,我们可以通过实时获取天气数据来提供更准确可靠的天气预报。在本文中,我们将学习如何使用JavaScript和WebSocket技术,来构建一个高效的实时天气预报系统。本文将通过具体的代码示例来展示实现的过程。We

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用于在DOM树中插入一个新的节点。这个方法需要两个参数:要插入的新节点和参考节点(即新节点将要被插入的位置的节点)。
