JS使用递归实现网页版简洁计算器

这次给大家带来JS使用递归实现网页版简洁计算器,JS使用递归实现网页版简洁计算器的注意事项有哪些,下面就是实战案例,一起来看一下。

递归实现网页版计算器可以简化代码,设计思路:

1、css+html实现计算器的外观,给每个button绑定number(z)事件,传入z的不同来区分触发事件的按钮。

放入head中

这个p放在body中,是计算器的html,number()通过传入不同的数字,区分触发按钮。





登录后复制

2、在number(z)方法中,利用DOM的innerHTML实现表达式的实时显示,并用字符串content存储已点击的数字或符号,当点击”=”时,调用fact(content)进行计算。

代码如下:

var content; //存储已点击的数字或符号,要定义成全局的,如果定义在number()中,每次content都会被重新赋值function number(z) {  var k=document.getElementById("txt");//获取显示框的 DOM,并缓存在k中  if(z==14){//如果点击了"="号   var sum = fact(content);//调用fact()进行计算,并把结果赋值给sum   content=content+"="+sum;//在要显示的内容后加入"="和sum   k.innerHTML = content;   content = null;//将content清空,准备下次计算  }else{  //如果没有点击"="号,而是点击的运算符,就需要通过switch把数字转化成运算符   switch(z){    case 10: z = '+'; break;    case 11: z = '-'; break;    case 12: z = '*'; break;    case 13: z = '/'; break;   }   //把此时输入的字符存入content   if(content){    content+=z.toString();   }else{    content=z.toString();   }   k.innerHTML = content;//让它实时显示  }}

登录后复制

3、本计算器中递归算法的思路:在fact(content)中,先用content.indexOf(“+”)判断”+”号是否存在,若存在,则分别递归调用index前后的两个字符串,并让其相加,直到所有串中都找不到”+”后,开始用content.lastIndexOf(“-“)判断”-“号,后续操作和加号一样,存在则递归index前后的两个字符串,并让其相减,直到找不到减号,就开始判断乘号和除号,直到没有符号后返回parseFloat(content),这里的content是递归调用后的无符号字符串,并不是最开始引入的参数了。

//实现递归计算function fact(content){ var index = content.indexOf("+");//获取"+"号的index if(index != -1){  return fact(content.substring(0,index))+fact(content.substring(index+1));  //当找得到“+”号时,分成两部分相加递归 }else{  var index2 = content.lastIndexOf("-");//当找不到“+”号时,开始找“-”号  if(index2 != -1){   return fact(content.substring(0,index2))-fact(content.substring(index2+1));   //当找得到“-”号时,分成两部分相减递归  }else{   var index3 = content.indexOf("*");//当找不到“-”号时,开始找“*”号   if(index3 != -1){    return fact(content.substring(0,index3))*fact(content.substring(index3+1));    //当找得到“*”号时,分成两部分相乘递归   }else{    var index4 = content.lastIndexOf("/");//当找不到“*”号时,开始找“/”号    if(index4 != -1){     return fact(content.substring(0,index4))/fact(content.substring(index4+1));     //当找得到“/”号时,分成两部分相除递归    }else{     return parseFloat(content);//当找不到“/”号时,返回这段串的变成float型的数值    }   }  } }}

登录后复制

以上是全部代码,设计思路中要注意的两点是:

1、加号和乘号用的indexOf(),而减号和除号用的lastIndexOf()。

举个例子:content=”3-2-1″

它如果用indexOf(),先把串分成fact(“3”)-fact(“2-1”),前面”3″无符号,递归调用fact时返回parseFloat(“3”),而后面的递归调用时,会变成parseFloat(“2”)-parseFloat(“1”)=1,这个是fact(“2-1”)的返回值,最终结果是2,这就相当于:3-(2-1)。

如果用lastIndexOf(),它把串分成fact(“3-2”)-fact(“1”),fact(“3-2”)的返回值是parseFloat(“3”)-parseFloat(“2”)=1,这样就实现了从左到右的计算。

除号也是同理:若content=”6/3/2″用indexOf(),相当于:6/(3/2),因为加号和乘号不存在顺序问题,因此可以用indexOf()。

2、乘除在判断的内层,加减在判断的外层。

由于乘除要先计算,内层的判断会先获得没有符号的串,他们就会先计算。

这个计算器个人觉得可以优化的地方:(大家也可以思考下)

1、给button绑定事件的时候,采用事件代理模式。
2、用到的哪些属性或方法需要考虑浏览器兼容问题。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

以上就是JS使用递归实现网页版简洁计算器的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2772422.html

(0)
上一篇 2025年3月8日 13:16:42
下一篇 2025年3月2日 17:58:08

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS怎样让元素沿着抛物线轨迹运动

    这次给大家带来JS怎样让元素沿着抛物线轨迹运动,JS让元素沿着抛物线轨迹运动的注意事项有哪些,下面就是实战案例,一起来看一下。 js实现小球抛物轨迹运动的大致思路: 1、用setInterval()方法,进行间隔性刷新,更新小球位置,以实现…

    编程技术 2025年3月8日
    200
  • vue.js vue-router提升用户体验

    这次给大家带来vue.js vue-router提升用户体验,vue.js vue-router提升用户体验的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 大家都知道对于单页应用,官方提供了vue-router进行路由跳转的处理,…

    编程技术 2025年3月8日
    200
  • JS与ajax同源策略在项目中怎样使用

    这次给大家带来JS与ajax同源策略在项目中怎样使用,JS与ajax同源策略在项目中使用的注意事项有哪些,下面就是实战案例,一起来看一下。 一、回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascri…

    编程技术 2025年3月8日
    200
  • 新手必看的js实现异步方法

    这次给大家带来新手必看的js实现异步方法,新手必看js实现的注意事项有哪些,下面就是实战案例,一起来看一下。 某天突然写了个方法要从后台调用数据,显示在前台页面,但是输出结果总是空undefined,得不到数据。多方找资料才发现,原来是入了…

    编程技术 2025年3月8日
    200
  • js怎么实现隔行变色

    这次给大家带来js怎么实现隔行变色,js实现隔行变色的注意事项有哪些,下面就是实战案例,一起来看一下。 function createTable(){ //创建表格 var table = document.createElement(“t…

    编程技术 2025年3月8日
    200
  • 在angularjs中怎样实现echart图表

    这次给大家带来在angularjs中怎样实现echart图表,在angularjs中实现echart图表的注意事项有哪些,下面就是实战案例,一起来看一下。 ehcart是百度做的数据图表,基于原生js。接口和配置都写的很好很易读,还可以用于…

    编程技术 2025年3月8日
    200
  • node.js实现web终端操作多用户

    这次给大家带来node.js实现web终端操作多用户,node.js实现web终端操作多用户的注意事项有哪些,下面就是实战案例,一起来看一下。 terminal(命令行)作为本地IDE普遍拥有的功能,对项目的git操作以及文件操作有着非常强…

    编程技术 2025年3月8日
    200
  • JS动态规划使用详解

    这次给大家带来JS动态规划使用详解,JS动态规划使用的注意事项有哪些,下面就是实战案例,一起来看一下。 其实像在我们前端的开发中,用到的高级算法并不多,大部分情况if语句,for语句,swith语句等等,就可以解决了。稍微复杂的,可能会想到…

    编程技术 2025年3月8日
    200
  • vue-cli脚手架的dev-server.js配置文件使用详解

    这次给大家带来vue-cli脚手架的dev-server.js配置文件使用详解,使用vue-cli脚手架dev-server.js配置文件的注意事项有哪些,下面就是实战案例,一起来看一下。 本文系统讲解vue-cli脚手架build目录中的…

    编程技术 2025年3月8日
    200
  • js和jquery如何实现自动加载图片(附代码)

    这次给大家带来js和jquery如何实现自动加载图片(附代码),js和jquery实现自动加载图片的注意事项有哪些,下面就是实战案例,一起来看一下。 一、JavaScript自动加载 ①在文本中用onload: 当页面中所有内容(包括图片)…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论