用js中的eval()函數(shù)實現(xiàn)一個簡單的計算器

雖然經(jīng)常會聽到一些不推薦使用eval()的聲音肮之, 但不得不承認eval()的功能十分強大六水,下面介紹一個我最近用eval()函數(shù)實現(xiàn)一個簡單計算器的例子竖共。

0.樣式預(yù)覽

html+css部分

1.思路介紹

先在html中結(jié)合css樣式畫出一個計算器灯帮,然后給每個按鈕添加onclick事件樊诺,計算由eval()實現(xiàn)酌予。

代碼如下:

①HTML部分

<body>
    <div id="calcFrame">
        <div id="display">
            <input type="text" id="message"/>
        </div>
        <div id="buttons">
            <ul>
                <li>
                    <ul>
                        <li><input type="button" value="退格" id="tg" onclick="clickBack()"/></li>
                        <li><input type="button" value="清除" id="qc" onclick="clickClear()"/></li>
                    </ul>
                </li>
                <li>
                    <ul>
                        <li><input type="button" value="7" id="b7" onclick="clickButton(7)"/></li>
                        <li><input type="button" value="8" id="b8" onclick="clickButton(8)"/></li>
                        <li><input type="button" value="9" id="b9" onclick="clickButton(9)"/></li>
                        <li><input type="button" value="/" id="divide" onclick="clickButton('/')"/></li>
                    </ul>
                </li>
                <li>
                    <ul>
                        <li><input type="button" value="4" id="b4" onclick="clickButton(4)"/></li>
                        <li><input type="button" value="5" id="b5" onclick="clickButton(5)"/></li>
                        <li><input type="button" value="6" id="b6" onclick="clickButton(6)"/></li>
                        <li><input type="button" value="*" id="multiply" onclick="clickButton('*')"/></li>
                    </ul>
                </li>
                <li>
                    <ul>
                        <li><input type="button" value="1" id="b1" onclick="clickButton(1)"/></li>
                        <li><input type="button" value="2" id="b2" onclick="clickButton(2)"/></li>
                        <li><input type="button" value="3" id="b3" onclick="clickButton(3)"/></li>
                        <li><input type="button" value="-" id="minus" onclick="clickButton('-')"/></li>

                    </ul>
                </li>
                <li>
                    <ul>
                        <li><input type="button" value="0" id="b0" onclick="clickButton('0')"/></li>
                        <li><input type="button" value="." id="point" onclick="clickButton('.')"/></li>
                        <li><input type="button" value="=" id="equal" onclick="clickEqual()"/></li>
                        <li><input type="button" value="+" id="add" onclick="clickButton('+')"/></li>   
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</body>

②CSS部分

#calcFrame{
    position: relative;
    padding: 0;
    margin: 10px auto;
    width: 400px;
    height: 300px;
    overflow: hidden;
}

#display{
    position: absolute;
    margin: 0;
    padding: 0;
    left: 5px;
    right: 5px;
    top: 5px;
    height: 100px;
    overflow: hidden;
    border: 2px solid black;
}

#message{
    width: 400px;
    height: 100px;
    font-size: 35px;
    border: 0;
}

#buttons{
    position: absolute;
    left: 5px;
    right: 5px;
    top: 110px;
    border: 1px solid #315484;
}

ul{
    margin: 0;
    padding: 0;
    list-style: none;
}

li{
    margin: 0;
    padding: 0;
    float: left;
}

input{
    margin-left: 1.5px;
    margin-top: 1.5px;
    margin-bottom: 1.5px;
    width: 95px;
    font-family: SimHei;
    font-size: 25px;
    
}


#add, #minus, #multiply, #divide, #equal{
    color: white;
    background-color: #6681ac;
}

#point, #b0, #b1, #b2, #b3, #b4, #b5, #b6, #b7, #b8, #b9{
    background-color: #afafaf;
}

#tg, #qc{
    color: white;
    width: 191.5px;
    background-color: #a4472d;
}

③JS部分

function clickButton(val){//點擊數(shù)字布朦,小數(shù)點,除等號外的運算符時...
    messageBox = document.getElementById('message');
    messageBox.value = messageBox.value + val;
}

function clickBack(){//點擊退格時...
    messageBox = document.getElementById('message');
    messageBox.value = messageBox.value.slice(0, -1);
}

function clickClear(){//點擊清除時...
    messageBox = document.getElementById('message');
    messageBox.value = '';
}

function clickEqual(){//點擊等號時...
    try{
        messageBox = document.getElementById('message');
        messageBox.value = eval(messageBox.value);
        if(messageBox.value == "undefined"){
            alert("輸入不能為空昏滴!")
            clickClear();
        }
    }
    catch(error){
        alert("請注意輸入格式!");
        clickClear();
    }
}

真正計算的部分只有eval()所在行对人,這里處理了兩個小bug谣殊,實際上還有很多bug...
之后會嘗試使用不采用eval()的方法重新實現(xiàn)計算部分。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末牺弄,一起剝皮案震驚了整個濱河市姻几,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌势告,老刑警劉巖蛇捌,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咱台,居然都是意外死亡络拌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門回溺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來春贸,“玉大人,你說我怎么就攤上這事遗遵∑妓。” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵车要,是天一觀的道長允粤。 經(jīng)常有香客問我,道長屯蹦,這世上最難降的妖魔是什么维哈? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任绳姨,我火速辦了婚禮登澜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘飘庄。我一直安慰自己脑蠕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布跪削。 她就那樣靜靜地躺著谴仙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碾盐。 梳的紋絲不亂的頭發(fā)上晃跺,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天,我揣著相機與錄音毫玖,去河邊找鬼掀虎。 笑死凌盯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烹玉。 我是一名探鬼主播驰怎,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼二打!你這毒婦竟也來了县忌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤继效,失蹤者是張志新(化名)和其女友劉穎症杏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑞信,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鸳慈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了喧伞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片走芋。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖潘鲫,靈堂內(nèi)的尸體忽然破棺而出翁逞,到底是詐尸還是另有隱情,我是刑警寧澤溉仑,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布挖函,位于F島的核電站,受9級特大地震影響浊竟,放射性物質(zhì)發(fā)生泄漏怨喘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一振定、第九天 我趴在偏房一處隱蔽的房頂上張望必怜。 院中可真熱鬧,春花似錦后频、人聲如沸梳庆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膏执。三九已至,卻和暖如春露久,著一層夾襖步出監(jiān)牢的瞬間更米,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工毫痕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留征峦,地道東北人纸巷。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像眶痰,于是被迫代替她去往敵國和親瘤旨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,687評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5竖伯? 答:HTML5是最新的HTML標準存哲。 注意:講述HT...
    kismetajun閱讀 27,452評論 1 45
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評論 3 119
  • 月下荷塘蛙聲片 孩童嬉戲在耳邊 敢問人家何處去 萬里無云一線天
    原醉閱讀 325評論 0 1