Javascript 不用 eval 实现计算器功能

先来看下最终效果,鼠标点击数字、运算符,计算出结果。
javascript 计算器
布局采用的标签是 div ,下面是布局代码

<div id="show_course"></div>
    <div id="show_result">0</div>
    <div id="num_area">
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <div>5</div>
        <div>6</div>
        <div>7</div>
        <div>8</div>
        <div>9</div>
        <div>0</div>
        <div>+</div>
        <div>-</div>
        <div>*</div>
        <div>/</div>
        <div>=</div>
        <div style="width:302px;">RESET</div>
    </div>

样式代码如下:

 body,
html,
div {
    padding: 0px;
    margin: 0px;
}

body {
    padding: 40px 80px;
}

#show_result,#show_course {
    width: 292px;
    height: 20px;
    border: 1px solid #000;
    border-bottom:none;
    font-size:20px;
    padding: 5px;
}
#show_result{
    border-bottom:1px solid #000;
    border-top:none;
    height:40px;
    text-align: right;
    font-size: 34px;
    font-weight: bold;
}

#num_area {
    width: 303px;
    font-size: 26px;
    line-height: 50px;
    text-align: center;
    font-weight: bold;
    border-left: 1px solid #000;
    overflow: hidden;
}

#num_area div {
    width: 100px;
    height: 50px;
    float: left;
    border-right: 1px solid #000;
    border-bottom: 1px solid #000;
    cursor: pointer;
}

接下来是js代码,不用 eval ( ) 函数的前提下:

//获取显示结果的div
var showResult = document.getElementById("show_result");
//获取显示过程的div
var showCourse = document.getElementById("show_course");
//获取所有的数字、运算符div
var divs = document.getElementById("num_area").getElementsByTagName("div");

//遍历div,给div添加点击事件
for (var i = 0; i < divs.length; i++) divs[i].onclick = clickHand;

//声明变量,数字1、数字2、运算符、bool用来控制给第几个数字赋值
var num1 = 0,
    num2 = "",
    symbol = "",
    value = "",
    bool = false,
    result = 0;

//点击事件
function clickHand() {
    //获取当前div的值
    value = this.innerHTML;
    //给第一个数字赋值
    if (!bool) {
        //判断是否为数字,如果是数字,就赋值给num1
        if (!isNaN(value)) {
            num1 += value;
            num1 = parseInt(num1);
            showResult.innerHTML = num1;
        } else {
            //将除了等号和reset之外的运算符赋值给symbol
            if (value !== "=" && value !== "RESET") {
                //bool用来控制给第一个数字赋值结束
                bool = true;
                symbol = value;
                value = "";
            }
        }
    } else {
        //给第二个数字赋值
        num2 += value;
        num2 = parseInt(num2);
        showResult.innerHTML = num2;
    }

    //当点击等号的时候,开始运算
    if (value === "=") {
        switch (symbol) {
            case "+":
                result = num1 + num2;
                break;
            case "-":
                result = num1 - num2;
                break;
            case "*":
                result = num1 * num2;
                break;
            case "/":
                result = num1 / num2;
                break;
        }

        //显示运算结果
        showResult.innerHTML = result;

        //运算完后,将变量值清空
        num1 = 0;
        num2 = "";
        symbol = "";
        value = "";
        bool = false;
    }

    //点击reset,将变量值清空
    if (value === "RESET") {
        num1 = 0;
        num2 = "";
        symbol = "";
        value = "";
        bool = false;
        showResult.innerHTML = "0";
    }

    //显示运算的过程
    showCourse.innerHTML=num1+symbol+num2;
    // console.log(num1, ",", symbol, ",", num2, ",", result, ",", bool);

到此就实现了计算器的功能,不足的是全篇中只有一个函数,没有把功能分开。只是分享给大家实现的思路吧。

更新了一篇,将功能函数分开来写了,https://blog.youkuaiyun.com/Charissa2017/article/details/103765350

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值