JavaScript中的異常捕捉介紹
與Java語言相同,JavaScript可以通過throw語句來拋出異常。與Java語言不同的是,JavaScript中可以通過throw語句拋出所有類型的值,而不僅止于拋出錯誤對象。
//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語言一樣,如果異常沒有被任何catch語句所捕捉,那么該異常會最終拋給用戶:
try{
//throw new Error("test error");//Error will be thrown. Error: test error
}finally{
}
try{
throw 42;//Error will be thrown. Error: 42
}finally{
}
對于拋出異常的捕捉,JavaScript使用的也是try/catch/finally語句,其使用規(guī)則為:try是必需的,catch和finally均為可選語句,但catch和finally中必須至少出現(xiàn)一個。
在catch語句中,可以定義一個參數(shù)e(或者其它任何合法的變量名),用于存儲拋出的異常值。在catch語句內部,這個參數(shù)可以作為局部變量而使用。與JavaScript中其它的變量使用情況不同的是,catch語句中的參數(shù)變量僅在catch語句內部有效(該變量的作用域局限在catch語句中)。
對于finally語句,無論try中是否有異常拋出,finally中的代碼均會被執(zhí)行。詳細情況包括:
1.try中無異常發(fā)生,當try語句執(zhí)行完畢后,finnally中的代碼將被執(zhí)行。
2.try中無異常發(fā)生,但由于執(zhí)行了break、continue或return語句而導致退出try代碼時,finally中的代碼將被執(zhí)行。
3.try中發(fā)生異常,異常由catch語句處理完成后,finally中的代碼被執(zhí)行。
4.try中發(fā)生異常,但因沒有catch語句導致該異常需要繼續(xù)向上拋出時,finally中的代碼將被執(zhí)行。值得注意的是,在catch語句缺失的情況下,JavaScript將先執(zhí)行finally中的代碼,然后才向上繼續(xù)拋出異常。
在finally代碼中,如果出現(xiàn)break、continue或return語句,那么JavaScript將直接執(zhí)行這些語句,而置try代碼中可能存在的break、continue或return語句于不顧;即使catch語句缺失導致有異常需要上報,JS也會丟棄這個異常上報信息,繼續(xù)執(zhí)行finally代碼中的break、continue或return語句。類似的,如果finally代碼中也拋出了異常,那么JavaScript將丟棄所有try代碼中的break、continue或return語句,同時也丟棄可能存在的異常上報行為,只拋出finally代碼中的異常。
相關文章
JavaScript實現(xiàn)的冒泡排序法及統(tǒng)計相鄰數(shù)交換次數(shù)示例
這篇文章主要介紹了JavaScript實現(xiàn)的冒泡排序法及統(tǒng)計相鄰數(shù)交換次數(shù),結合實例形式分析了javascript冒泡排序的實現(xiàn)技巧及針對交換次數(shù)的統(tǒng)計方法,便于更直觀的了解冒泡排序算法,需要的朋友可以參考下2017-04-04BootStrap 圖片樣式、輔助類樣式和CSS組件的實例詳解
這篇文章主要介紹了BootStrap 圖片樣式、輔助類樣式和CSS組件的實現(xiàn)代碼,圖文并茂介紹的非常詳細,需要的朋友參考下吧2017-01-01JS中split()用法(將字符串按指定符號分割成數(shù)組)
這篇文章主要介紹了JS中split()用法(將字符串按指定符號分割成數(shù)組)的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-10-10