日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

詳解JavaScript錯(cuò)誤捕獲

瀏覽:25日期:2023-10-02 17:23:41
一、基本使用與邏輯

使用

try{ //code....}catch(err){ //error handling}finally{ //no matter what happens in the try/catch (error or no error), this code in the finally statement should run. }

邏輯

詳解JavaScript錯(cuò)誤捕獲

二、特性

try...catch 僅適用于運(yùn)行時(shí)錯(cuò)誤,解釋階段錯(cuò)誤無法正常工作

try{ {{{{{{{}catch(err){ console.error(err)}//引擎在‘parse-time’出錯(cuò),導(dǎo)致無法理解代碼,因此無法捕捉

try...catch 只能同步工作

try{ setTimeout(function(){undefinedVariable; },1000)}catch(err){ console.error(err)}//setTimeout的回調(diào)函數(shù)執(zhí)行時(shí),引擎已經(jīng)離開try...catch結(jié)構(gòu)

finally 能讓try塊中的return語句失效

function test(){ try { return 1; } catch(error) { return 2; } finally { return 3; }}console.log(test());//3三、錯(cuò)誤對象

當(dāng)程序發(fā)生error,js內(nèi)部會(huì)生成一個(gè)包含error細(xì)節(jié)的對象,該對象會(huì)被作為參數(shù)傳進(jìn)catch

對于所有內(nèi)置錯(cuò)誤,錯(cuò)誤對象具有兩個(gè)主要屬性

name 錯(cuò)誤類型 message 文本類型的錯(cuò)誤信息 stack (非標(biāo)準(zhǔn)屬性)發(fā)生錯(cuò)誤時(shí)的調(diào)用棧信息,主要用于調(diào)試

try { lalala; // error, variable is not defined!} catch (err) { alert(err.name); // ReferenceError alert(err.message); // lalala is not defined alert(err.stack); // ReferenceError: lalala is not defined at (...call stack) // Can also show an error as a whole // The error is converted to string as 'name: message' alert(err); // ReferenceError: lalala is not defined}

理論上,我們可以throw任何東西作為錯(cuò)誤對象,但最好的習(xí)慣是throw一個(gè)具有name,message的對象,以便和內(nèi)置錯(cuò)誤對象保持兼容

番外:內(nèi)置的錯(cuò)誤對象

對象 含義 ReferenceError 引用未定義變量時(shí)觸發(fā) SyntaxError 使用不合法的語法結(jié)構(gòu)時(shí)觸發(fā) TypeError 值得類型非預(yù)期時(shí)觸發(fā) URIError 錯(cuò)誤使用全局URI函數(shù)如encodeURI()、decodeURI()等時(shí)觸發(fā) RangeError 對Array構(gòu)造函數(shù)使用錯(cuò)誤的長度值,對Number.toExponential()、Number.toFixed()或Number.toPrecision()使用無效數(shù)字等 EvalError 全局函數(shù)eval()中發(fā)生的錯(cuò)誤 四、較好的catch和throw策略

​ catch錯(cuò)誤不單單是為了防止程序掛掉,更重要的目的是方便調(diào)試,找bug,所以對錯(cuò)誤的處理策略,稍微可以體現(xiàn)出碼者的優(yōu)雅性

​ 俗話說的好,碼者,人恒雅也,盡量遵循一個(gè)原則,catch只處理自己知道的錯(cuò)誤

舉個(gè)梨子

let json = ’{ 'age': 30 }’; try{ let user = JSON.parse(json); alert( user.name );} catch (err) { console.error(’JSON Error:’+err);}

上述例子的catch策略能保證程序正常,因?yàn)閏atch塊能catch內(nèi)部所有的錯(cuò)誤,無論是JSON.parse出錯(cuò)還是user.name不存在報(bào)錯(cuò),都能被catch到,但兩種錯(cuò)誤都用同一種打印是不利于調(diào)試的,寫成下面這樣會(huì)好一點(diǎn)

let json = ’{'age':30}’try{ let user = JSON.parse(json); alert(user.name)}catch(err){ if(err instanceof SyntaxError){ console.error(’JSON Error:’+err); } else throw err;}

每個(gè)catch塊處理自己知道得,可能會(huì)出現(xiàn)得錯(cuò)誤,就是說,編程人員在編程的時(shí)候,catch那些預(yù)料到的錯(cuò)誤,而將可能自己沒料到的錯(cuò)誤拋到外面。

五、Promise的錯(cuò)誤處理

​ 眾所周知,Promise是會(huì)吞掉error的,因?yàn)閜romise的實(shí)現(xiàn)就在內(nèi)部對所有error進(jìn)行了捕獲,且捕獲到的error不是向外拋出(外指promise之外),而是沿著鏈找到最近的onreject回調(diào)傳入,所以promise的錯(cuò)誤處理只有兩種辦法

設(shè)置onreject回調(diào) 全局捕獲

舉個(gè)栗子

try{ new Promise((resolve,reject)=>{throw new Error(’promise error’) }).catch(()=>{//錯(cuò)誤在最近的onreject回調(diào)被捕獲console.error(err); })}catch(err){ //永遠(yuǎn)不會(huì)執(zhí)行,promise吞掉error console.error(err);}

另外需要注意,無論是執(zhí)行者函數(shù)(executor)和還是 promise 的處理程序(handler),內(nèi)部發(fā)生的錯(cuò)誤統(tǒng)統(tǒng)吞掉,相當(dāng)于被隱式catch,error會(huì)自動(dòng)找到最近的onreject回調(diào)傳進(jìn)去

try{ new Promise((resolve,reject)=>{resolve(); }).then(()=>{throw new Error(’promise then error’); }).catch((err){console.error(err); })}catch(err){ //地球毀滅之前都不會(huì)執(zhí)行 console.error(err)}

同理,在錯(cuò)誤找到onreject傳進(jìn)去之前,經(jīng)過的then注冊的onfulfilled回調(diào)統(tǒng)統(tǒng)失效,直到找到onreject回調(diào),處理之后,onreject回調(diào)之后的onfulfilled回調(diào)才正常

try { new Promise((resolve, reject) => {throw new Error(’promise error’) }).then((ret) => {//錯(cuò)誤沒有處理,失效console.log(’then1:’ + ret) }).catch((err) => {//錯(cuò)誤處理了,后序正常console.error(err);return ’handled’ }).then((ret) => {//正常執(zhí)行console.log(’then2’ + ret); })} catch (err) { //同樣的,人類毀滅之前都不會(huì)執(zhí)行 console.error(err)}// Error:promise error//then2handled

那整條鏈一個(gè)catch都沒設(shè)置會(huì)怎么樣呢?

那這個(gè)error就會(huì)擊穿地心,一直穿透到全局,根據(jù)宿主環(huán)境的不同觸發(fā)不同的全局事件,比如說瀏覽器中會(huì)觸發(fā) unhandledrejection事件,node環(huán)境中也會(huì)觸發(fā)unhandledRejection事件,一般會(huì)對這事件進(jìn)行監(jiān)聽,再顯示信息給編程人員或者用戶

番外1:chromium / v8 / v8 / 3.29.45 的 Promise內(nèi)部錯(cuò)誤捕捉

詳解JavaScript錯(cuò)誤捕獲

番外2:async/await錯(cuò)誤捕捉

六、性能損耗​

After V8 version 6 (shipped with Node 8.3 and latest Chrome), the performance of code inside try-catch is the same as that of normal code. ------ 爆棧網(wǎng)

(稍微測了一下,相差無幾)

以上就是詳解JavaScript錯(cuò)誤捕獲的詳細(xì)內(nèi)容,更多關(guān)于JavaScript 錯(cuò)誤捕獲的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费在线观看不卡| 精品无人区麻豆乱码久久久| 亚洲一区二区三区四区电影| 视频一区日韩精品| 国产精品密蕾丝视频下载| 国产精品第一| 不卡专区在线| 亚洲深夜福利| 国产欧美日本| 播放一区二区| 欧美精品中文| 国产一区二区三区不卡av| 激情国产在线| 午夜在线视频观看日韩17c| 在线观看一区| 欧美偷窥清纯综合图区| 久久精品国产免费| 久久一区精品| 亚洲高清激情| 国产亚洲一区二区手机在线观看| 欧美欧美黄在线二区| 亚洲精品日韩久久| 最新国产精品视频| 日本va欧美va瓶| 日韩avvvv在线播放| 日韩三级精品| 日韩成人午夜精品| 欧美日韩一区二区三区不卡视频| 91嫩草精品| 中文视频一区| 久久精品123| 黄色亚洲精品| 麻豆国产精品视频| av成人国产| 影音国产精品| 国产美女高潮在线| 国产精品乱战久久久| 四虎精品一区二区免费| 婷婷亚洲五月| 亚洲91视频| 欧美日韩色图| 久久久人人人| 日韩中文在线播放| 色一区二区三区| 欧美专区一区| 国产精品成人国产| 国产欧美另类| 国产区精品区| 国产精品亚洲一区二区三区在线观看| 在线一区视频观看| 成人在线超碰| 中文字幕在线免费观看视频| 精品久久免费| 国产精品15p| 午夜精品亚洲| 麻豆国产一区| 天堂成人国产精品一区| 国产精品99视频| 色综合视频一区二区三区日韩| 色婷婷色综合| 欧美综合社区国产| 好吊日精品视频| 91免费精品| 日本a级不卡| 黄色成人91| 国产精品嫩模av在线| 国产精品porn| 日韩精品麻豆| 麻豆国产91在线播放| 日韩中文字幕| 蜜桃91丨九色丨蝌蚪91桃色 | 日韩av网站在线观看| 九九久久婷婷| 午夜精品成人av| 欧美激情aⅴ一区二区三区 | 91久久久精品国产| 久久激情五月婷婷| 天堂av一区| 日韩一区免费| 日韩在线欧美| 日韩欧美午夜| 欧美偷窥清纯综合图区| 亚洲欧洲日本mm| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 国产福利资源一区| 午夜久久av| 精品一区二区三区中文字幕| 蜜桃精品视频| 日本亚洲不卡| 国产美女亚洲精品7777| а√在线中文在线新版| 黑人精品一区| 福利一区二区三区视频在线观看| 国产麻豆一区二区三区精品视频| 国产精品videossex| 日本不卡免费高清视频在线| 久久婷婷久久| 亚洲人妖在线| 91精品国产经典在线观看| 久久国产福利| 国产伦一区二区三区| aⅴ色国产欧美| 在线日韩成人| 久久中文亚洲字幕| 久久久久国产| 亚洲影视一区二区三区| 天堂精品久久久久| 欧美一级二级三级视频| 美女国产精品久久久| 精品一区二区三区免费看| 精品日韩视频| 97久久中文字幕| 日本亚洲不卡| 日韩久久一区| 国产精品入口久久| 中文字幕在线免费观看视频| 久久不射网站| 群体交乱之放荡娇妻一区二区| 久久一级电影| 国产探花一区| 影音国产精品| 高清一区二区三区av| 最新国产精品| 国产亚洲一区| 久久性天堂网| 成人影视亚洲图片在线| 欧美日一区二区在线观看| 国产精品视频一区二区三区综合| 一区二区小说| 石原莉奈在线亚洲三区| 久久99国产精品视频| 日韩免费福利视频| 99在线精品免费视频九九视| 午夜视频精品| 欧美激情日韩| 亚洲国产不卡| 日本国产欧美| 久久天堂影院| 欧美日韩午夜| 黑丝一区二区三区| 成人精品久久| 欧美成人一二区| 国产精品网站在线看| 亚洲精品视频一二三区| 免费看的黄色欧美网站| 激情欧美一区| 中文另类视频| 91精品国产乱码久久久久久久| 久久国产精品色av免费看| 蜜桃传媒麻豆第一区在线观看| 午夜日本精品| 亚洲欧美日韩国产综合精品二区| 精品久久亚洲| 成人精品天堂一区二区三区| 精品国产成人| 日韩欧美综合| 国产调教一区二区三区| 久久久亚洲一区| 国产欧美日韩一区二区三区在线| 美日韩一区二区三区| 午夜av一区| 久久福利在线| 五月精品视频| 99在线|亚洲一区二区| 深夜日韩欧美| 欧美福利专区| 久久亚洲人体| 日本午夜免费一区二区| 欧美成人亚洲| 综合国产精品| 久久久久久久久丰满| 国产精品中文字幕制服诱惑| 日韩电影免费网站| 国产精品久久久久久久久久妞妞| 久久一级电影| 欧美视频久久| 亚洲欧美久久久| 成人国产综合| 亚洲图片久久| 久久天堂精品| 精品国产aⅴ| 亚洲精品在线a| 日韩大片在线观看| 午夜电影亚洲| 国产精品17p| 久久九九国产| 国产日产精品_国产精品毛片| 成人精品动漫一区二区三区| 日韩精品欧美精品| 91精品观看| 亚洲日本网址| 黄色在线网站噜噜噜| 日韩欧美一区免费| 国产精东传媒成人av电影| 欧美在线资源| 久久九九精品| 岛国av在线网站| 日韩欧美精品一区| 久久久久97| 日本黄色精品|