用JS实现计算器

一、思路

  1. 点击数字或符号,将其值放入文本框中;
  2. 对于“.”的bug处理;
  3. 进行运算:声明一个数组(为动态数组),在清屏前先存值

二、代码块

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        table{
            border-collapse: collapse;
            width: 400px;
            margin: 0 auto;
            border: 1px solid silver;
        }
        table td{
            border: 1px solid silver;
        }
        button[name="btnclick"]{
            width: 100px;
            height: 60px;
            font-size: 25px;
        }
        button[name="btnall"]{
            width: 100%;
            height: 60px;
            font-size: 25px;
        }
        .txt{
            width: 99%;
            height: 75px;
            font-size: 25px;
            outline: none;
            text-align: right;
            background-color: white;
            border-style: none;
        }
    </style>
</head>
<body>
<table>
    <tr>
        <td colspan="4"><input type="text" class="txt" value="0" disabled></td>
    </tr>
    <tr>
        <td colspan="2"><button class="btn" name="btnall">ac</button></td>
        <td colspan="2"><button class="btn" name="btnall">del</button></td>
    </tr>
    <tr>
        <td><button class="btn" name="btnclick">7</button></td>
        <td><button class="btn" name="btnclick">8</button></td>
        <td><button class="btn" name="btnclick">9</button></td>
        <td><button class="btn" name="btnclick">*</button></td>
    </tr>
    <tr>
        <td><button class="btn" name="btnclick">4</button></td>
        <td><button class="btn" name="btnclick">5</button></td>
        <td><button class="btn" name="btnclick">6</button></td>
        <td><button class="btn" name="btnclick">/</button></td>
    </tr>
    <tr>
        <td><button class="btn" name="btnclick">1</button></td>
        <td><button class="btn" name="btnclick">2</button></td>
        <td><button class="btn" name="btnclick">3</button></td>
        <td><button class="btn" name="btnclick">-</button></td>
    </tr>
    <tr>
        <td><button class="btn" name="btnclick">0</button></td>
        <td><button class="btn" name="btnclick">.</button></td>
        <td><button class="btn" name="btnclick">+</button></td>
        <td><button class="btn" name="btnclick">=</button></td>
    </tr>
</table>
<script>
    var btn=document.getElementsByClassName("btn");
    var txt=document.getElementsByClassName("txt")[0];
    var res=[];
    for(var i=0;i<btn.length;i++){
        btn[i].onclick=function(){
            if(!isNaN(this.innerHTML)||this.innerHTML=="."){
                if(txt.value=="0"){
                    if(this.innerHTML=="."){
                        txt.value="0"+this.innerHTML;
                    }
                    else{
                        txt.value=this.innerHTML;
                    }
                }
                else{
                    if(this.innerHTML=="."){
                        if(txt.value.indexOf(".")==-1){
                            txt.value+=this.innerHTML;
                        }
                    }
                    else{
                        txt.value+=this.innerHTML;
                    }
                }
            }
            else{
                if(this.innerHTML=="+"||this.innerHTML=="-"||this.innerHTML=="*"||this.innerHTML=="/"){
                    if(res.length!=0){
                        if(txt.value=="0"&&isNaN(res[res.length-1])){
                            res[res.length-1]=this.innerHTML;
                        }
                        else{
                            res[res.length]=txt.value;
                            res[res.length]=this.innerHTML;
                        }
                    }
                    else{
                        res[res.length]=txt.value;
                        res[res.length]=this.innerHTML;
                    }
                    txt.value="0";
                }
                else if(this.innerHTML=="="){
                    res[res.length]=txt.value;
                    txt.value=eval(res.join(""));
                    res=[];
                }
                else if(this.innerHTML=="ac"){

                }
                else if(this.innerHTML=="del"){
                    var arr=txt.value.split("");
                    arr.pop();
                    if(arr.length==0){
                        txt.value="0";
                        return;
                    }
                    txt.value=arr.join("");
                }
            }
        }
    }
</script>
</body>
</html>

三、遇到的问题及解决方法

  1. 问题:在输入之前,要先将默认的“0”清掉
    解决方法:作判断,若当前值为“0”时,则直接赋值;若当前值不为“0”,则做拼接
  2. 问题:按“.”时,不能直接显示“.”,需做处理
    解决方法:在当前值为“0”中作判断,若当前文本值为“.”,则给该文本值用“0”拼接;否则直接赋值
  3. 问题:一个屏上只能有一个“.”
    解决思路:在屏幕上已不是“0”时,加入代码,点“.”时考虑是否需要“.”,可使用indexOf方法检索“.”是否出现

    indexOf():如果要检索的字符串值没有出现,则该方法返回 -1。
  4. 问题:只有数字和“.”才能出现在屏幕上
    解决方法:使用isNaN()

    isNaN(x):用于检查其参数是否是非数字值;若 x 是特殊的非数字值 NaN(或能被转换为这样的值),返回的值就是 true,若x 是其他值,则返回 false。
  5. 问题:所按不同符号的结果
    解决方法
    (1)若所按符号为“+ - * /”时:按照数组的长度存值,长度为0时先存屏幕的值,长度为1时传入符号
    (2)若所按符号为“=”时:按照数组的长度存值;使用join(),将数组拼接为字符串;使用eval(),计算表达式;将计算后得到的值给屏幕
    (3)若所按符号为“ac”时:将屏幕上的值清空,数组中的值清空
    (4)若所按符号为“del”时:先使用split(),将字符串转为数组;再使用pop(),删除数组最后一个元素;最后使用join(),将数组拼接为字符串

    join():将数组转换为字符串,对数组进行拼接
    eval():计算表达式,进行对象装化
    split():将字符串转换为数组形式;括号里的参数取决于字符串中的标志性东西,以标志性东西截取,产生一个新的数组
    pop():删除数组最后一个元素,并返回删除的元素,对原数组有影响
  6. 问题:连续按了两次符号
    解决思路:只需判断数组里的最后一位是否为符号,若最后一位是符号,再一次所按的还是符号,则需用该符号将数组的最后一位符号替换掉
    解决方法:在所按符号为“+ - * /”中添加代码,
    (1)先判断数组的长度是否为0,为0时先存值;不为0时再判断数组的最后一位是否为非数字值(此为符号),是则直接覆盖,否则继续存值
    (2)数组长度不为0时的判断条件加当前屏幕的值为0
  7. 问题:一次计算过后,需用第一次运算的结果作为第二次运算的值
    解决方法:在所按符号为“=”中,每次运算结束将数组清空,为下一次计算作准备;不清空则上一次的表达式还在其中
  8. 问题:在所按符号为“del* /”时,删除到最后一位,屏幕值清空了
    解决方法:在删除数组最后一个元素后,进行判断,若数组长度为0,则将屏幕值改为0,并且返回该值
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的用 JavaScript 实现计算器的代码: HTML 代码: ``` <!DOCTYPE html> <html> <head> <title>JavaScript Calculator</title> </head> <body> <h1>JavaScript Calculator</h1> <form> <input type="text" id="result" disabled> <br> <input type="button" value="1" onclick="addToResult('1')"> <input type="button" value="2" onclick="addToResult('2')"> <input type="button" value="3" onclick="addToResult('3')"> <input type="button" value="+" onclick="addToResult('+')"> <br> <input type="button" value="4" onclick="addToResult('4')"> <input type="button" value="5" onclick="addToResult('5')"> <input type="button" value="6" onclick="addToResult('6')"> <input type="button" value="-" onclick="addToResult('-')"> <br> <input type="button" value="7" onclick="addToResult('7')"> <input type="button" value="8" onclick="addToResult('8')"> <input type="button" value="9" onclick="addToResult('9')"> <input type="button" value="*" onclick="addToResult('*')"> <br> <input type="button" value="0" onclick="addToResult('0')"> <input type="button" value="." onclick="addToResult('.')"> <input type="button" value="=" onclick="calculateResult()"> <input type="button" value="/" onclick="addToResult('/')"> <br> <input type="button" value="C" onclick="clearResult()"> </form> <script src="calculator.js"></script> </body> </html> ``` JavaScript 代码: ``` var result = document.getElementById("result"); function addToResult(value) { result.value += value; } function clearResult() { result.value = ""; } function calculateResult() { result.value = eval(result.value); } ``` 这个计算器支持加、减、乘、除、小数点和清除操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值