主頁 > 企業開發 > 原生javascript開發計算器實體

原生javascript開發計算器實體

2021-02-22 06:41:41 企業開發

計算器的主要作用是進行數字運算,開發一個計算器功能的web實體,有助于更好的掌握js基礎的數字運算能力,

本實體詳細分析一個js計算器的開發步驟,學習本教程時最好先具備一些基礎的js知識,

計算器包括顯示數字區域和按鍵區域兩大部分,先把計算器的這兩個區域的html元素撰寫出來,如下所示:

<div class="calculator_wrap" id="calculator"><!--計算器外包元素-->
  <div class="show_num"><!--顯示數字區域-->
    <div class="num_save" id="numSave"></div><!--計算公式-->
    <div class="num_cur" id="numCur">0</div><!--計算結果-->
    <div class="show_m" id="showM">M</div><!--記憶存盤標志-->
  </div>
  <div class="btn_wrap" id="btnWrap"><!--按鈕區域-->
    <div class="btn" data-key="MC">MC</div><!--記憶清零-->
    <div class="btn" data-key="MR">MR</div><!--記憶讀取-->
    <div class="btn" data-key="MS">MS</div><!--存盤記憶-->
    <div class="btn" data-key="MA">M+</div><!--記憶加-->
    <div class="btn" data-key="ML">M-</div><!--記憶減-->
    <div class="btn" data-key="BACK"></div><!--退格-->
    <div class="btn" data-key="CE">CE</div><!--清除當前-->
    <div class="btn" data-key="Clear">C</div><!--清除-->
    <div class="btn" data-key="Negate">±</div><!--正負轉換-->
    <div class="btn" data-key="Square">√ ̄</div><!--平方根-->
    <div class="btn" data-key="Num" data-value="7">7</div><!--7-->
    <div class="btn" data-key="Num" data-value="8">8</div><!--8-->
    <div class="btn" data-key="Num" data-value="9">9</div><!--9-->
    <div class="btn" data-key="Base" data-value="/">/</div><!---->
    <div class="btn" data-key="Percentage">%</div><!--百分號-->
    <div class="btn" data-key="Num" data-value="4">4</div><!--4-->
    <div class="btn" data-key="Num" data-value="5">5</div><!--5-->
    <div class="btn" data-key="Num" data-value="6">6</div><!--6-->
    <div class="btn" data-key="Base" data-value="*">*</div><!---->
    <div class="btn" data-key="Reciprocal">1/x</div>  <!--倒數-->
    <div class="btn" data-key="Num" data-value="1">1</div><!--1-->
    <div class="btn" data-key="Num" data-value="2">2</div><!--2-->
    <div class="btn" data-key="Num" data-value="3">3</div><!--3-->
    <div class="btn" data-key="Base" data-value="-">-</div><!---->
    <div class="btn equal" data-key="Equal">=</div><!--等于-->
    <div class="btn zero" data-key="Num" data-value="0">0</div><!--0-->
    <div class="btn" data-key="Point">.</div><!--小數點-->
    <div class="btn" data-key="Base" data-value="+">+</div><!---->
  </div>
</div>

讀者可以自己撰寫一些樣式,設計一個自己喜歡的計算器效果,本實體的計算器效果如下圖所示:

 

樣式代碼:

  .calculator_wrap{width:240px;height:360px;padding:10px;margin:30px auto;border:1px solid #8acceb;background:#d1f1ff;}
  .calculator_wrap .show_num{position:relative;padding:0 8px;height:60px;background:#fff;text-align:right;}
  .calculator_wrap .show_m{position: absolute;left:10px;bottom:3px;display:none;}
  .calculator_wrap .num_save{height:26px;line-height:26px;font-size:12px;white-space:nowrap;}
  .calculator_wrap .num_cur{font-size:28px;height:34px;line-height:34px;}
  .calculator_wrap .btn_wrap{font-size:0px;}
  .calculator_wrap .btn{display:inline-block;width:38px;height:38px;line-height:38px;text-align:center;border:1px solid #ccc;background:#666;color:#fff;font-size:14px;margin:10px 10px 0 0;cursor:pointer;}
  .calculator_wrap .btn:hover{background:#333;}
  .calculator_wrap .btn:nth-child(5n){margin-right:0px;}
  .calculator_wrap .equal{position:absolute;height:90px;line-height:90px;}
  .calculator_wrap .zero{width:90px;}

 

對于新手來說,計算器功能看起來好像很復雜,那么多按鈕、多種計算方式,不知如何開始,其實任何一個功能,只需要理清楚思路,一步一步撰寫代碼,會發現實作起來都不難,

 

1 獲取各個html元素

web前端不論要在頁面上做什么,都要先獲取頁面上的各個DOM元素,看起來整個計算器的按鈕較多,實際開發中可以使用事件代理來操作按鈕,所以只獲取所有按鈕的容器元素即可,代碼如下:

//獲取外包元素
var eCalculator = document.getElementById('calculator');
//保存運算資料(公式)容器
var eNumSave = document.getElementById('numSave');
//當前數字容器
var eNumCur = document.getElementById('numCur');
//按鈕外部容器,用于事件代理
var eBtnWrap = document.getElementById('btnWrap');
//記憶存盤標志元素
var eShowM = document.getElementById('showM');

 

2 宣告相關變數

在運算程序中,需要一些變數來進行輔助計算、存盤結果和判斷等,如下所示:

//運算公式
var sStep = '';
//當前數字
var sCurValuehttps://www.cnblogs.com/jiangweiping/archive/2021/02/21/= 'https://www.cnblogs.com/jiangweiping/archive/2021/02/21/0';
//運算結果
var nResult = null;
//運算子
var sMark = '';
//MR記憶存盤資料
var nMvalue = https://www.cnblogs.com/jiangweiping/archive/2021/02/21/0;
//輸入狀態,false:輸入數字替換原數字;true:輸入數字加到原數字后面;
var bLogStatus = false;

 

3 按鍵上添加點擊事件

因為整個計算器按鍵較多,每一個按鈕都單獨系結一個事件會顯得太多,很繁瑣,還會影響性能,且容易出錯,所以剛才只獲取了按鍵的外部容器 eCalculator,

再使用事件代理,就只需要在容器上添加點擊事件,判斷當前點擊的按鍵是哪一個,再執行對應的計算即可,用滑鼠點擊按鍵的時候,可能會因為點得太快而選擇了按鍵上的文字,因此還需要在外包容器上添加一個阻止默認行為的操作,代碼如下所示:

//外包容器添加滑鼠按下事件,用于防止選中文字
eCalculator.addEventListener('mousedown',function(event){
  //阻止滑鼠按下時的默認行為,防止點擊按鈕過快時選中文字
  event.preventDefault();
});

//按鍵容器添加點擊事件,用于代理所有按鍵的操作
eBtnWrap.addEventListener('click',function(event){

});

3.1 獲取點擊的按鍵和值

通過事件函式傳入的event引數,可以獲取到滑鼠點擊的元素,再通過元素上的data-key和data-value屬性判斷滑鼠點擊的是哪一個按鍵以及它的值,如下所示:

eBtnWrap.addEventListener('click',function(event){
  //獲取點擊的元素
  var eTarget = event.target;
  //判斷按下的鍵
  var key = eTarget.dataset.key;
  //獲取按下的值
  var value =https://www.cnblogs.com/jiangweiping/archive/2021/02/21/ eTarget.dataset.value;
});

3.2 判斷按鍵及值,數字鍵和小數點執行輸入操作

如果按鍵屬性data-key是'Num'表示按下的是數字,'Point'表示小數點,

這些按鍵都是執行輸入,因為數字有多個,所以把數字輸入封裝到fnInputNum函式中,再封裝fnShowResult函式把資料顯示到顯示數字區域,如下所示:

eBtnWrap.addEventListener('click',function(event){
  /**/

  //判斷點擊的是否是按鍵
  if(key){
    //用switch陳述句判斷不同的按鍵執行對應的操作
    switch(key){
      //數字鍵執行操作
      case 'Num':
        fnInputNum(value);
        break;
      //小數點操作
      case 'Point':
        //判斷是否有已小數點,用于限制只能輸入一個小數點
        if(sCurValue.indexOf('.')==-1){
          sCurValue = sCurValue + '.';
          bLogStatus = true;
        }
        break;
    }
    //顯示資料到顯示數字區域
    fnShowResult();
  }
});
//輸入數字
function fnInputNum(num){
  //根據輸入狀態判斷是替換當前數字還是添加到當前數字后面
  if(bLogStatus){
    sCurValue = sCurValue + num;
  }else{
    //限制第一個數字不能是0
    if(num!=0){
      bLogStatus = true;
    }
    sCurValue = num;
  }
}
//顯示計算結果
function fnShowResult(){
  //顯示計算公式
  eNumSave.innerHTML = sStep;
  //限制數字總長度
  if(sCurValue.length>14){
    sCurValue = sCurValue.slice(0,14);
  }
  //顯示當前數字
  eNumCur.innerHTML = sCurValue;
}

這時候已經可以點擊數字和小數點,輸入到計算器顯示屏上,如圖所示:

  

3.3 加減乘除運算

計算器最基本的就是加減乘除運算,為了實作對數字進行加減乘除并計算結果功能,封裝fnCountResult、fnBaseCount和fnEqual三個函式,

fnCountResult用于根據運算子計算結果;

fnBaseCount修改計算公式或計算結果;

fnEqual用于按下=號時計算結果,并重置資料,如下所示:

eBtnWrap.addEventListener('click',function(event){
  /**/

  //判斷點擊的是否是按鍵
  if(key){
    //用switch陳述句判斷不同的按鍵執行對應的操作
    switch(key){
      /**/
      //加減乘除基本運算
      case 'Base':
        fnBaseCount(value);
        break;
      //等于
      case 'Equal':
        fnEqual();
        break;
    }
    //顯示資料到顯示數字區域
    fnShowResult();
  }
});
//計算結果
function fnCountResult(){
  //判斷當前運算子并執行運算
  switch(sMark){
    case '+':
      nResult = nResult===null?+sCurValue:nResult + (+sCurValue);
      break;
    case '-':
      nResult = nResult===null?+sCurValue:nResult - sCurValue;
      break;
    case '*':
      nResult = nResult===null?+sCurValue:nResult * sCurValue;
      break;
    case '/':
      nResult = nResult===null?+sCurValue:nResult / sCurValue;
      break;
    default:
      nResult = +sCurValue;
  }
}
//加減乘除基礎運算
function fnBaseCount(key){
  //如果是輸入狀態,進行運算
  if(bLogStatus){ 
    //修改輸入狀態
    bLogStatus = false;
    //計算公式
    sStep = sStep + ' ' + sCurValue + ' ' + key;
    //計算結果
    fnCountResult();
    sCurValue = ''+nResult;
  }else{
    //如果公式為空,先加上原始數字
    if(sStep==''){  
      sStep = sCurValue + ' ' + key;
    }else{  //如果已有公式,更改最后的運算子
      sStep = sStep.slice(0,sStep.length-1) + ' ' + key;
    }
  }
  //更改運算子,用于計算
  sMark = key;
}
//等于
function fnEqual(){
  //如果沒有運算子,阻止后續操作
  if(sMark=='')return;
  //計算結果
  fnCountResult();
  sCurValue = ''+nResult;
  //重置資料
  sStep = '';
  sMark = '';
  bLogStatus = false;
}

現在已經可以在計算器上做加減乘除的計算了,如圖所示:

 

3.4 再給其他按鍵添加操作,代碼如下所示:

eBtnWrap.addEventListener('click',function(event){
  /**/

  //判斷點擊的是否是按鍵
  if(key){
    //用switch陳述句判斷不同的按鍵執行對應的操作
    switch(key){
      /**/

      //清除
      case 'Clear':
        fnClear()
        break;
      //退格
      case 'BACK':
        fnBack();
        break;
      //CE
      case 'CE':
        //清空當前顯示數值
        sCurValuehttps://www.cnblogs.com/jiangweiping/archive/2021/02/21/= 'https://www.cnblogs.com/jiangweiping/archive/2021/02/21/0';
        bLogStatus = false;
        break;
      //取反
      case 'Negate':
        //當前數值取反
        sCurValuehttps://www.cnblogs.com/jiangweiping/archive/2021/02/21/= ''+(-sCurValue);
        break;
      //取平方根
      case 'Square':
        //當前數值取平方根
        nResult = Math.sqrt(+sCurValue);
        //其他資料初始化
        sCurValuehttps://www.cnblogs.com/jiangweiping/archive/2021/02/21/= ''+nResult;
        sStep = '';
        sMark = '';
        bLogStatus = false;
        break;
      //倒數
      case 'Reciprocal':
        //當前數值取倒數
        //其他資料初始化
        nResult = 1/sCurValue;
        sCurValuehttps://www.cnblogs.com/jiangweiping/archive/2021/02/21/= ''+nResult;
        sStep = '';
        sMark = '';
        bLogStatus = false;
      break;
      //M系列
      case 'MC':
        //記憶數值清零
        nMvalue = https://www.cnblogs.com/jiangweiping/archive/2021/02/21/0;
        fnShowM()
        break;
      case 'MR':
        //顯示記憶數值
        sCurValuehttps://www.cnblogs.com/jiangweiping/archive/2021/02/21/= '' + nMvalue;
        fnShowM()
        break;
      case 'MS':
        //記憶數值改為當前數值
        nMvalue = https://www.cnblogs.com/jiangweiping/archive/2021/02/21/+sCurValue;
        fnShowM()
        break;
      case 'MA':
        //當前數值加到記憶數值中
        nMvalue += +sCurValue;
        fnShowM()
        break;
      case 'ML':
        //從記憶數值中減去當前數值
        nMvalue -= +sCurValue;
        fnShowM()
        break;
    }
    //顯示資料到顯示數字區域
    fnShowResult();
  }
});
//清除
function fnClear(){
  //初始化所有資料
  sStep = '';
  sCurValue = '0';
  nResult = null;
  sMark = '';
  bLogStatus = false;
}
//退格
function fnBack(){
  //必須是輸入狀態才可以退格
  if(bLogStatus){
    //減去數值最后一位數
    sCurValue = https://www.cnblogs.com/jiangweiping/archive/2021/02/21/sCurValue.slice(0,sCurValue.length-1);
    //如果最后數值為慷訓負號(-),改為0,重置輸入狀態為false,不可再退格
    if(sCurValuehttps://www.cnblogs.com/jiangweiping/archive/2021/02/21/==''||sCurValuehttps://www.cnblogs.com/jiangweiping/archive/2021/02/21/=='-'){
      sCurValue = '0';
      bLogStatus = false;
    }
  }
}
//判斷是否有M記憶存盤
function fnShowM(){
  bLogStatus = false;
  //判斷是否顯示記憶存盤標志
  eShowM.style.display = nMvalue=https://www.cnblogs.com/jiangweiping/archive/2021/02/21/=0?'none':'block';
}

 

4 系結鍵盤事件
寫到這里,計算器已經可以正常使用了,不過只能用滑鼠點擊按鍵操作效率不高,為了可以更快的使用計算器,還需要加上鍵盤事件,當按下對應按鍵時,執行操作,如下所示:

//鍵盤事件
document.addEventListener('keyup',function(event){
  //獲取當前鍵盤按鍵
  var key = event.key;
  //獲取按鍵code
  var code = event.keyCode;
  //限制正確的按鍵才修改顯示的資料
  var comply = false;
  //輸入數字
  if((code>=48&&code<=57)||(code>=96&&code<=105)){
    fnInputNum(key);
    comply = true;
  }
  //加減乘除
  if( key=='*'||key=='+'||key=='/'||key=='-'){
    fnBaseCount(key);
    comply = true;
  }
  //esc鍵
  if(code==27){
    fnClear();
    comply = true;
  }
  //回車鍵
  if(code==13){
    fnEqual();
    comply = true;
  }
  //退格鍵
  if(code==8){
    fnBack();
    comply = true;
  }
  if(comply){
    //顯示資料到計算器螢屏
    fnShowResult();
  }
});

 

一個簡單的計算器就完成了,如果以學習為目的話,建議不要直接復制代碼,最好直接手動輸入代碼及注釋,加深印象和提高學習效果,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/262012.html

標籤:其他

上一篇:030_JavaScript

下一篇:Typescript快速入門

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more