在学校学习过程中,老师总是让我们做各种各样小案例(demo)。但是我们在做的过程,总会遇到一些问题,会使我们绞尽脑汁。那让我们一起来看看这个案例吧!

先看看效果

用javascript编写计算器 javascript做一个计算器_字符串

实现原理

其实制作这个简单的计算器思路很简单,就是给这些数字按钮(1234567890),和加减乘除按钮(+ - * /)都绑定onclick事件,这些按钮点击的目的就是要把自己value值放到上面显示器上(txt),其他的按钮就是处理显示器(txt)上的value值:AC键可以把之前输入的数据全部清除。“=”键就是计算我们输入的数据,“<<”键把去掉显示器value最后一位去掉。
这里需要用eval()方法,eval()方法可以计算括号里面的表达式:

var str = "2+2*4";
        console.log(eval(str));//10

这样我们就可以把显示器里的表达式传给它,它就会帮我们计算结果了。
里面还需要用到slice(),slice(start,end)里面有两个参数,就是截取开始位置和结束的位置(结束位置可以不写,不写就是后面的都要),截取字符串里的某一个片段:

var str = "hello wrold!";
        var com = str.slice(6,11);
        var com1 = str.slice(6);//从第六位开始截取,后面全要
        console.log(com);  //world
        console.log(com1); //world!

了解这两个方法之后,来做这个计算器就很简单了。

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js制作简单计算器</title>
    <style>
        #jsq{
            width: 310px;
            height: 480px;
            padding: 5px 0px;
            background-color: mediumorchid;
            border-radius: 5%;
            text-align: center;
            box-shadow: 0px 5px 20px;/*给计算器一些阴影,看起来有立体感*/  
        }
        #txt{
            width: 220px;
            height: 38px;
            border: none;
            border-radius: 10px 0px 0px 10px;/*给input文本框的左上角和左下角设置圆角*/
            box-shadow: 0px 5px 10px;
            outline: none;
            text-align: right;
            font-size: 24px;
        }
        #dele{
            display: inline-block;
            height: 40px;
            background-color: #fff;
            border: none;
            padding-top: 9px;
            outline: none;
            border-radius: 0px 10px 10px 0px;/*给ibutton的右上角和右下角设置圆角*/
            color: red;
        }
        .btn{
            background-color: #fff;
            outline: none;
            width: 60px;
            height: 60px;
            border: 1px solid yellowgreen;
            border-radius: 15px;
            margin-top: 10px;
            box-shadow: 0px 5px 15px;/*给按钮一些阴影,看起来有立体感*/
            font-size: 18px;
            background-color: slategray;
        }
        .first{
            background-color: red;
        }
        .ling{
            width: 125px;
        }
    </style>
</head>
<body>
    <div id="jsq">
        <h2>javascript简单计算器</h2>
        <!-- 计算器显示框 id为txt -->
        <input type="text" id="txt"><button id="dele"><strong><<</strong></button>
        <div>
            <input type="button" value="AC" class="btn first">
            <input type="button" value="ON" class="btn">
            <input type="button" value="OFF" class="btn">
            <input type="button" value="+" class="btn nuber"><br>
            <input type="button" value="7" class="btn nuber">
            <input type="button" value="8" class="btn nuber">
            <input type="button" value="9" class="btn nuber">
            <input type="button" value="*" class="btn nuber"><br>
            <input type="button" value="4" class="btn nuber">
            <input type="button" value="5" class="btn nuber">
            <input type="button" value="6" class="btn nuber">
            <input type="button" value="-" class="btn nuber"><br>
            <input type="button" value="1" class="btn nuber">
            <input type="button" value="2" class="btn nuber">
            <input type="button" value="3" class="btn nuber">
            <input type="button" value="/" class="btn nuber"><br>
            <input type="button" value="0" class="btn nuber ling">
            <input type="button" value="." class="btn nuber">
            <!-- “=”的按钮,设置id为result -->
            <input type="button" value="=" class="btn" id="result">
        </div>
    </div>
    <script>
        var nub = document.getElementsByClassName('nuber');
        var ac = document.getElementsByClassName('first')[0];
        var rs = document.getElementById('result');
        var txt = document.getElementById('txt');
        var de = document.getElementById('dele');
        //用for循环给所有class为nuber的标签绑定onclick事件,
        //执行dis方法且把自己的value当作实参传入dis方法中
        for(let i =0;i<nub.length;i++){
            nub[i].onclick = function(){
                dis(this.value);
            }
        }
        //dis方法就是改变txt的value,使用形参,让nub把自己的value传进来
         function dis(va){
            txt.value += va;
        }
        //lete方法是接收删除后的数据
        function lete(bb){
            txt.value = bb;
        }
        //“AC”的点击事件,当点击AC时,把txt里的value为空
        ac.onclick = function(){
            txt.value = "";
        }

        //给“=”按钮绑定添加onclick事件,
        rs.addEventListener('click',function(){
            var result = txt.value;
            txt.value = "";
            txt.value = eval(result); //eval()方法可以执行JavaScript代码或表达式
        },false)
        
        //删除键添加onclick事件,方法里取出txt的value值,把value值转换成字符串
        //再使用slice把字符串最后一位去掉,剩下的再返给txt。
        de.addEventListener('click',function(){
            var vl = txt.value;
            var aa = String(vl);
            var ff = aa.slice(0,aa.length-1); 
            lete(ff);    
        },false)
        
    </script>
</body>
</html>