Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 中文字幕一区中文亚洲,...91久久精品一区二区三区,成年人国产网站

          整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線:

          javascript 異常處理的一些經(jīng)驗(yàn)

          javascript 異常處理的一些經(jīng)驗(yàn)

          介: 為了提升應(yīng)用穩(wěn)定性,我們對(duì)前端項(xiàng)目開(kāi)展了腳本異常治理的工作,對(duì)生產(chǎn)上報(bào)的js error進(jìn)行了整體排查,試圖通過(guò)降低腳本異常的發(fā)生頻次來(lái)提升相關(guān)告警的準(zhǔn)確率,結(jié)合最近在這方面閱讀的相關(guān)資料,嘗試階段性的做個(gè)總結(jié),下面我們來(lái)介紹下js異常處理的一些經(jīng)驗(yàn)。

          作者 | 肖榮強(qiáng)(路遷)

          來(lái)源 | 阿里開(kāi)發(fā)者公眾號(hào)


          寫(xiě)在前面

          為了提升應(yīng)用穩(wěn)定性,我們對(duì)前端項(xiàng)目開(kāi)展了腳本異常治理的工作,對(duì)生產(chǎn)上報(bào)的js error進(jìn)行了整體排查,試圖通過(guò)降低腳本異常的發(fā)生頻次來(lái)提升相關(guān)告警的準(zhǔn)確率,結(jié)合最近在這方面閱讀的相關(guān)資料,嘗試階段性的做個(gè)總結(jié),下面我們來(lái)介紹下js異常處理的一些經(jīng)驗(yàn)。


          先說(shuō)概念
          什么是異常

          先來(lái)看一下官方的定義:

          Error objects are thrown when runtime errors occur. The Error object can also be used as a base object for user-defined exceptions.


          描述的很簡(jiǎn)單,我們總結(jié)一下就是代碼在執(zhí)行過(guò)程中遇到了問(wèn)題,程序已經(jīng)無(wú)法正常運(yùn)行了,Error對(duì)象會(huì)被拋出,這一點(diǎn)它不同于大部分編程語(yǔ)言里使用的異常對(duì)象Exception,甚至更適合稱(chēng)之為錯(cuò)誤,應(yīng)該說(shuō)事實(shí)也確實(shí)如此,Error對(duì)象在未被拋出時(shí)候和js里其他的普通對(duì)象沒(méi)有任何差別是不會(huì)引發(fā)異常的,同時(shí)Error 對(duì)象也可用于用戶自定義錯(cuò)誤的基礎(chǔ)對(duì)象。

          看下面兩個(gè)例子:


          ↓↓↓執(zhí)行結(jié)果↓↓↓


          結(jié)論:只有在執(zhí)行過(guò)程中的異常可以被捕獲,語(yǔ)法解析階段的異常或者不在當(dāng)前同步任務(wù)中的異常都無(wú)法被捕獲。


          ↓↓↓執(zhí)行結(jié)果↓↓↓

          以上紅色信息里包含了異常信息(message)和棧跟蹤(stack trace)信息,對(duì)于定位代碼中的問(wèn)題起到重要作用,可以看到棧跟蹤是從底部文件位置21:15到頂部25:7位置的;前兩個(gè)console在遇到異常時(shí)候未被執(zhí)行,第二個(gè)script標(biāo)簽內(nèi)的代碼被正常執(zhí)行。

          結(jié)論:當(dāng)任務(wù)執(zhí)行過(guò)程中出現(xiàn)未處理的異常,會(huì)一直沿著調(diào)用棧一層層向外拋出(有點(diǎn)像事件冒泡),最終會(huì)導(dǎo)致當(dāng)前任務(wù)被終止執(zhí)行。當(dāng)前任務(wù)終止后JS 線程會(huì)繼續(xù)從任務(wù)隊(duì)列中提取下一個(gè)任務(wù)繼續(xù)執(zhí)行。


          異常的類(lèi)型

          錯(cuò)誤名

          描述

          示例

          EvalError

          關(guān)于 eval [1]函數(shù)的錯(cuò)誤,已不在當(dāng)前ECMAScript規(guī)范中使用,不再會(huì)被運(yùn)行時(shí)拋出。

          throw new EvalError('EvalError', 'file.js', 10); // 可以由業(yè)務(wù)代碼主動(dòng)拋出

          RangeError

          值不在允許的范圍內(nèi),典型的是試圖傳遞一個(gè)數(shù)值給一個(gè)范圍內(nèi)不包含該數(shù)值的函數(shù),此時(shí)應(yīng)該引發(fā)RangeError。

          const numObj=123;numObj.toFixed(-1); // Uncaught RangeError: toFixed() digits argument must be between 0 and 100 at Number.toFixed

          ReferenceError

          當(dāng)一個(gè)不存在(或尚未初始化)的變量被引用時(shí)發(fā)生的錯(cuò)誤。

          const a=undefinedVariable; // Uncaught ReferenceError: undefinedVariable is not defined

          SyntaxError

          解析代碼階段,發(fā)現(xiàn)了不符合語(yǔ)法規(guī)范的代碼。

          const 111variable=1; // Uncaught SyntaxError: Invalid or unexpected token

          TypeError

          類(lèi)型錯(cuò)誤,用來(lái)表示值的類(lèi)型是非預(yù)期類(lèi)型。

          const a=null;a.doSomeThing(); // Uncaught TypeError: Cannot read properties of null (reading 'doSomeThing')

          URIError

          使用URI處理函數(shù)產(chǎn)生的錯(cuò)誤

          decodeURIComponent('%') // U


          點(diǎn)擊鏈接查看原文,獲取更多福利!

          https://developer.aliyun.com/article/1058117?groupCode=alitech?utm_content=g_1000361548


          版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開(kāi)發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開(kāi)發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開(kāi)發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫(xiě)侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。

          異常的概念:程序在運(yùn)行過(guò)程中出現(xiàn)的錯(cuò)誤 (最大的特征:一旦代碼出現(xiàn)異常 其后的代碼就不再執(zhí)行)
          

          在js中出現(xiàn)異常后,瀏覽器會(huì)給出一段錯(cuò)誤碼,就是錯(cuò)誤信息,錯(cuò)誤消息由錯(cuò)誤類(lèi)型與錯(cuò)誤詳細(xì)點(diǎn)構(gòu)成

          錯(cuò)誤類(lèi)型:

          1.Error:error構(gòu)造函數(shù)創(chuàng)建一個(gè)錯(cuò)誤對(duì)象,如果程序運(yùn)行環(huán)境出現(xiàn)錯(cuò)誤,就會(huì)拋出一個(gè)該錯(cuò)誤類(lèi)型的實(shí)例對(duì)象,除此之外該類(lèi)型還支持用戶自定義錯(cuò)誤類(lèi)型

          2.TypeError:如果代碼訪問(wèn)的數(shù)據(jù)類(lèi)型錯(cuò)誤 拋出異常

          3.ReferenceError:當(dāng)訪問(wèn)的變量不存在的時(shí)候 拋出異常

          4.SyntaxError:當(dāng)語(yǔ)法錯(cuò)誤的時(shí)候 拋出異常

          5.URIError:當(dāng)前調(diào)用URI相關(guān)函數(shù)時(shí)出現(xiàn)錯(cuò)誤 拋出異常

          6.EvalError:當(dāng)非法調(diào)用eval函數(shù)的時(shí)候 拋出異常

          7.RangeError:當(dāng)數(shù)組等類(lèi)型的方位非法使用的時(shí)候 拋出異常

          ##如何處理異常
          

          就是要出現(xiàn)異常后 還能繼續(xù)執(zhí)行

          常見(jiàn)的異常有兩大類(lèi):

          a.運(yùn)行環(huán)境的多樣性

          b.代碼錯(cuò)誤 語(yǔ)法錯(cuò)誤

          try-catch語(yǔ)法: 即嘗試這么做,如果出現(xiàn)錯(cuò)誤捕獲錯(cuò)誤

          try{

          可能出現(xiàn)錯(cuò)誤的代碼

          }

          常概念

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8"/>

          <title>處理異常</title>

          </head>

          <body>

          </body>

          <script>

          try{

          console.log(abc);

          }catch (e) {

          console.log('對(duì)不起你的代碼有錯(cuò)');

          console.log(e);

          }

          var a="正常執(zhí)行"

          console.log(a);

          console.log(a);

          console.log(a);

          console.log(a);

          console.log(a);

          console.log(a);

          </script>

          </html>

          輸出結(jié)果

          拋出異常代碼:

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8"/>

          <title>拋出異常</title>

          </head>

          <body>

          </body>

          <script>

          console.log(1);

          console.log(2);

          try{

          o1=new Error('我是一個(gè)自定義的拋出異常');

          throw o1;

          } catch(e) {

          console.log( e===o1);

          }

          console.log(3);

          console.log(4);

          console.log(5);

          console.log(6);

          </script>

          </html>

          輸出結(jié)果

          常見(jiàn)錯(cuò)誤:


          主站蜘蛛池模板: 无码人妻精品一区二区蜜桃网站| 国产成人一区二区三区电影网站 | 中文字幕一区二区三区永久 | 国产电影一区二区| 国产免费一区二区三区VR| 亚州日本乱码一区二区三区| 日本一区二区三区不卡视频中文字幕| 久久久精品人妻一区二区三区 | 无码精品一区二区三区免费视频 | 国产乱人伦精品一区二区在线观看| 无码精品黑人一区二区三区 | 国产一区二区三区精品久久呦| 精品欧洲AV无码一区二区男男| 97久久精品午夜一区二区| 精品国产一区二区三区久久蜜臀| 视频一区二区精品的福利| 日韩a无吗一区二区三区| 成人欧美一区二区三区在线视频| 精品一区二区三区免费毛片爱| 精品视频一区二区三区免费| 久久久久国产一区二区| 中文国产成人精品久久一区| 538国产精品一区二区在线| 日韩精品无码人妻一区二区三区| 午夜视频久久久久一区| 亚洲AV永久无码精品一区二区国产 | jazzjazz国产精品一区二区| 欧洲精品码一区二区三区免费看 | 国产精品熟女一区二区| 中文字幕乱码一区二区免费| 国产午夜精品一区理论片| 国产一区二区在线视频| 亚洲国产一区在线| 亚洲高清美女一区二区三区| 亚洲av成人一区二区三区| 无码国产精品一区二区免费式影视| 91video国产一区| 国精产品一区一区三区有限公司| 国精产品一区一区三区有限公司 | 国产手机精品一区二区| 精品国产亚洲第一区二区三区|