JavaScript中的異常捕捉介紹
與Java語(yǔ)言相同,JavaScript可以通過(guò)throw語(yǔ)句來(lái)拋出異常。與Java語(yǔ)言不同的是,JavaScript中可以通過(guò)throw語(yǔ)句拋出所有類型的值,而不僅止于拋出錯(cuò)誤對(duì)象。
//Throw an Error object.
try{
throw new Error("Message in Error Object");
}catch(e){
console.log(e);//Error: Message in Error Object
}
try{
throw "Raw Message";
}catch(message){
console.log(message);//Raw Message
console.log(typeof message);//string
}
try{
throw 42;
}catch(code){
console.log(code);//42
console.log(typeof code);//number
}
與Java語(yǔ)言一樣,如果異常沒(méi)有被任何catch語(yǔ)句所捕捉,那么該異常會(huì)最終拋給用戶:
try{
//throw new Error("test error");//Error will be thrown. Error: test error
}finally{
}
try{
throw 42;//Error will be thrown. Error: 42
}finally{
}
對(duì)于拋出異常的捕捉,JavaScript使用的也是try/catch/finally語(yǔ)句,其使用規(guī)則為:try是必需的,catch和finally均為可選語(yǔ)句,但catch和finally中必須至少出現(xiàn)一個(gè)。
在catch語(yǔ)句中,可以定義一個(gè)參數(shù)e(或者其它任何合法的變量名),用于存儲(chǔ)拋出的異常值。在catch語(yǔ)句內(nèi)部,這個(gè)參數(shù)可以作為局部變量而使用。與JavaScript中其它的變量使用情況不同的是,catch語(yǔ)句中的參數(shù)變量?jī)H在catch語(yǔ)句內(nèi)部有效(該變量的作用域局限在catch語(yǔ)句中)。
對(duì)于finally語(yǔ)句,無(wú)論try中是否有異常拋出,finally中的代碼均會(huì)被執(zhí)行。詳細(xì)情況包括:
1.try中無(wú)異常發(fā)生,當(dāng)try語(yǔ)句執(zhí)行完畢后,finnally中的代碼將被執(zhí)行。
2.try中無(wú)異常發(fā)生,但由于執(zhí)行了break、continue或return語(yǔ)句而導(dǎo)致退出try代碼時(shí),finally中的代碼將被執(zhí)行。
3.try中發(fā)生異常,異常由catch語(yǔ)句處理完成后,finally中的代碼被執(zhí)行。
4.try中發(fā)生異常,但因沒(méi)有catch語(yǔ)句導(dǎo)致該異常需要繼續(xù)向上拋出時(shí),finally中的代碼將被執(zhí)行。值得注意的是,在catch語(yǔ)句缺失的情況下,JavaScript將先執(zhí)行finally中的代碼,然后才向上繼續(xù)拋出異常。
在finally代碼中,如果出現(xiàn)break、continue或return語(yǔ)句,那么JavaScript將直接執(zhí)行這些語(yǔ)句,而置try代碼中可能存在的break、continue或return語(yǔ)句于不顧;即使catch語(yǔ)句缺失導(dǎo)致有異常需要上報(bào),JS也會(huì)丟棄這個(gè)異常上報(bào)信息,繼續(xù)執(zhí)行finally代碼中的break、continue或return語(yǔ)句。類似的,如果finally代碼中也拋出了異常,那么JavaScript將丟棄所有try代碼中的break、continue或return語(yǔ)句,同時(shí)也丟棄可能存在的異常上報(bào)行為,只拋出finally代碼中的異常。
- tomcat6下jsp出現(xiàn)getOutputStream() has already been called for this response異常的原因和解決方法
- 跟我學(xué)習(xí)javascript解決異步編程異常方案
- 詳解JavaScript中的異常處理方法
- JS中的異常處理方法分享
- js中的異常處理try...catch使用介紹
- js異常捕獲方法介紹
- JS異常處理的一個(gè)想法(sofish)
- JSP上傳圖片產(chǎn)生 java.io.IOException: Stream closed異常解決方法
- javascript 異常處理使用總結(jié)
- 詳解js前端代碼異常監(jiān)控
相關(guān)文章
JS實(shí)現(xiàn)判斷移動(dòng)端PC端功能
這篇文章主要介紹了JS實(shí)現(xiàn)判斷移動(dòng)端PC端功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02JavaScript實(shí)現(xiàn)的冒泡排序法及統(tǒng)計(jì)相鄰數(shù)交換次數(shù)示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的冒泡排序法及統(tǒng)計(jì)相鄰數(shù)交換次數(shù),結(jié)合實(shí)例形式分析了javascript冒泡排序的實(shí)現(xiàn)技巧及針對(duì)交換次數(shù)的統(tǒng)計(jì)方法,便于更直觀的了解冒泡排序算法,需要的朋友可以參考下2017-04-04JavaScript中Cookie的使用之如何設(shè)置失效時(shí)間
這篇文章主要介紹了JavaScript中Cookie的使用之如何設(shè)置失效時(shí)間問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2022-12-12BootStrap 圖片樣式、輔助類樣式和CSS組件的實(shí)例詳解
這篇文章主要介紹了BootStrap 圖片樣式、輔助類樣式和CSS組件的實(shí)現(xiàn)代碼,圖文并茂介紹的非常詳細(xì),需要的朋友參考下吧2017-01-01JS中split()用法(將字符串按指定符號(hào)分割成數(shù)組)
這篇文章主要介紹了JS中split()用法(將字符串按指定符號(hào)分割成數(shù)組)的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10客戶端JavaScript的線程池設(shè)計(jì)詳解
這篇文章主要為大家介紹了客戶端JavaScript的線程池設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01