javascript-簡單的計算機實現步驟分解(附圖)_javascript技巧
1、數學運算「 ,-,*,/」的使用
2、輸入內容的判斷,對於事件物件的來源的判斷
效果:

代碼:
#calculate {
行高:60px;
文字對齊:居中;
背景:#ccc;
字體大小:16px;
背景:#ccc;
字體大小:16px;
背景:#ccc;
字體大小:16px;字體粗細:粗體;
}
#計算tbody輸入{
寬度:100%;
高度:60px;
背景:#033;
顏色:#fff;
字體:粗體16px/1em '微軟雅黑';
}
#計算tbody td{
寬度:25%;
背景:#fff;
}
#calculate_outPut{
字體大小:20px;
字母間距:2px;
背景:#fff;
高度:40px;
邊框:無;
文字對齊:右;右; 🎜>寬度:100%;
}
風格>
標題>
表>
//計算物件
var operaExp={
' ':function (num1,num2){return num1 num2;},
'-':function(num1,num2){return num1- num2;},
'*':function(num1,num2){返回num1* num2;},
'/':function(num1,num2){返回num2===0?0:num1/ num2;}
}
//計算函數
var operaNum=function (num1,num2,op){
if(!(num1&&num2))return;
//保證num1,num2都為數字
num1=Number(num1);
num2=數字(num2 );
//不操作存在符,返回num1;
if(!op)return num1;
//匹配侵犯公式
if(!operateExp[op])return 0;
返回操作Exp[op](num1,num2);
}
//顯示面板
varcalculate_outPut=document.getElementById("calculate_outPut");
//操作面板
varcalculate_num= document.getElementById("calculate_num");
var result=0;//計算結果
var isReset=false;//是否重新設定
var operation;//操作符
//設定顯示器的值
function setScreen (num){
calculate_outPut.value=num;
}
//取得顯示器的值
function getScreen(){
returnvalue ;
}
//新增點擊事件
calculate_num.onclick=function(e){
var ev = e ||視窗.事件;
var target = ev.target || ev. .srcElement; if(target.type=="button"){ var mark=target.getAttribute("_type");//取得目前點擊按鈕的自訂屬性。
var value=target.value;//取得目前的值
var num=getScreen();//取得目前框的值
if(mark==='bs'){//退格鍵
if(num==0)return;
var snum=Math.abs(num).toString();
if(snum.lengthsetScreen(0);
else
setScreen(num.toString().slice(0,-1));
}
if(mark==='num'){//數字鍵
if (num==='0'||isReset){//有運算元或顯示器為0
setScreen(value);
isReset=false;
return;
}
setScreen(num.toString().concat(value));
}
if(mark==="."){//小數點
var hasPoint=num.toString().indexOf(" .")>-1;
if(hasPoint){
if(isReset){
setScreen("0" value);
isReset=false;
return;
}
return;
}
setScreen(num.toString().concat(value));
}
if(mark===" /-"){//正負號
setScreen(-num);
}
if(mark==="op"){//如果點擊的是運算元則設計第一個運算元
if(isReset)return ;
isReset=true;
if(!operation){
result= num;
operation=value;
return;
}
result=operateNum(result,numnum ,operation);
setScreen(result);
operation=value;
}
if(mark==="cls"){//清除
result=0;
setScreen(result);
isReset=false;
}
if(mark==="eval"){//計算
if(!operation)return;
result=operateNum (result,num,operation);
setScreen(result);
operation=null;
isReset=false;
}
}
}
View Code
詳細分解:
第一:分支計算部分沒有使用switch 語句,使用了名值對的形式。
//計算物件
var operate 🎜>' ':function(num1,num2){return num1 num2;},
'-':function(num1,num2){return num1-num2;},
'*':function(num1, num2){return num1*num2;},
'/':function(num1,num2){return num2===0?0:num1/num2;}
}
第二:物件事件的屬性的使用,取得點擊物件的類型。利用事件冒泡,捕捉事件,並對事件進行分類。
var target = ev.target || ev.srcElement;
if(target.type=="button"){
var mark=target.getAttribute( "_type");//取得目前點擊button的自訂的屬性。
var value=target.value;//取得目前的值
var num=getScreen();//取得目前框的值
if(mark==='bs'){//退格鍵
if(num==0)return;
var snum=Math.abs(num).toString();
if(snum.lengthsetScreen(0);
else
setScreen(num.toString().slice(0,-1));
}
if(mark==='num'){//數字鍵
if (num==='0'||isReset){//有運算元或顯示器為0
setScreen(value);
isReset=false;
return;
}
setScreen(num.toString().concat(value));
}
if(mark==="."){//小數點
var hasPoint=num.toString().indexOf(" .")>-1;
if(hasPoint){
if(isReset){
setScreen("0" value);
isReset=false;
return;
}
return;
}
setScreen(num.toString().concat(value));
}
if(mark===" /-"){//正負號
setScreen(-num);
}
if(mark==="op"){//如果點擊的是運算元則設計第一個運算元
if(isReset)return ;
isReset=true;
if(!operation){
result= num;
operation=value;
return;
}
result=operateNum(result,numnum ,operation);
setScreen(result);
operation=value;
}
if(mark==="cls"){//清除
result=0;
setScreen(result);
isReset=false;
}
if(mark==="eval"){//計算
if(!operation)return;
result=operateNum (result,num,operation);
setScreen(result);
operation=null;
isReset=false;
}
}
}
全域變數的使用,利用全域變數對局部操作進度進行控制。 (狀態控制)
var operation;//操作符
將頁面操作分離,解耦合。
//表示画面の値を設定します
function setScreen(num){
calculate_outPut.value=num;
}
//表示画面の値を取得します
function getScreen (){
return Calculate_outPut.value;
}
5 番目: オペランドをフィルタリングして計算を完了します。
//関数を計算
var OperatorNum =function(num1,num2,op){
if(!(num1&num2))return;
//num1 と num2 が両方とも数値であることを保証します
num1=Number(num1); Number(num2) ;
//演算子が存在しません、return num1;
if(!op)return num1;
if(!operateExp[op])return 0;
return operand[op](num1,num2)
}

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

高效斐波那契數列計算器:PHP實作斐波那契數列(Fibonaccisequence)是一個非常經典的數學問題,其規律是每個數等於前兩個數總和,即F(n)=F(n -1)+F(n-2),其中F(0)=0,F(1)=1。在計算斐波那契數列時,可以使用遞歸方式來實現,但隨著數值增大會出現效能問題。因此,本文將介紹如何使用PHP來寫一個高效率的斐波那

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。
