考慮到 JS 中的錯(cuò)誤可比服務(wù)器端的代碼產(chǎn)生的錯(cuò)誤要多得多,并且還難以發(fā)現(xiàn)及修正,所以 JS 代碼必須有異常處理以及全局一場(chǎng)處理。
程序運(yùn)行過(guò)程中難免會(huì)出錯(cuò),出錯(cuò)后的運(yùn)行結(jié)果往往是不正確的,因此運(yùn)行時(shí)出錯(cuò)的程序通常被強(qiáng)制中止。運(yùn)行時(shí)的錯(cuò)誤統(tǒng)稱(chēng)為異常,為了能在錯(cuò)誤發(fā)生時(shí)得到一個(gè)處理的機(jī)會(huì),JavaScript提供了異常處理語(yǔ)句。包含try-catch、try-catch-finally和throw.
try-catch語(yǔ)句
?
1 2 3 4 5 6 try{ tryStatements } catch(exception){ catchStatements }參數(shù)說(shuō)明:
tryStatements:必選項(xiàng)。可能發(fā)生錯(cuò)誤的語(yǔ)句序列。
exception:必選項(xiàng)。任何變量名,用于引用錯(cuò)誤發(fā)生時(shí)的錯(cuò)誤對(duì)象。
catchStatements:可選項(xiàng)。錯(cuò)誤處理語(yǔ)句,用于處理tryStatements中發(fā)生的錯(cuò)誤。
編碼時(shí)通常將可能發(fā)生錯(cuò)誤的語(yǔ)句寫(xiě)入try塊的花括號(hào)中,并在其后的catch塊中處理錯(cuò)誤。錯(cuò)誤信息包含在一個(gè)錯(cuò)誤對(duì)象(Error對(duì)象)里,通過(guò)exception的引用可以訪問(wèn)該對(duì)象。根據(jù)錯(cuò)誤對(duì)象中的錯(cuò)誤信息以確定如果處理。
?
1 2 3 4 5 6 7 8 <script type="text/javascript"> try{ var n = error; //人為引發(fā)一個(gè)錯(cuò)誤,error未定義就使用 } catch(e){ alert((e.number&0xFFFF) + "號(hào)錯(cuò)誤:" + e.description); //錯(cuò)誤處理:僅輸出錯(cuò)誤信息 } </script>該代碼段使用了一個(gè)try-catch結(jié)構(gòu)處理程序運(yùn)行時(shí)錯(cuò)誤,第4行人為引發(fā)一個(gè)錯(cuò)誤。第6~9行的catch塊捕捉錯(cuò)誤并處理。
提示:JavaScript的錯(cuò)誤為運(yùn)行時(shí)錯(cuò)誤和語(yǔ)法錯(cuò)誤,語(yǔ)法錯(cuò)誤在編譯階段發(fā)現(xiàn);而運(yùn)行時(shí)錯(cuò)誤在運(yùn)行過(guò)程中發(fā)現(xiàn),錯(cuò)誤處理語(yǔ)句僅能處理運(yùn)行時(shí)錯(cuò)誤。
try-catch-finally語(yǔ)句
?
1 2 3 4 5 6 7 8 9 try{ tryStatements; } catch( exception ){ handleStatements; } finally{ fianllyStatements; }參數(shù)說(shuō)明:
tryStatements:必選項(xiàng),可能引發(fā)異常的語(yǔ)句。
handleStatements:可選項(xiàng),異常處理語(yǔ)句。
fianllyStatements:可選項(xiàng),在其他過(guò)程執(zhí)行結(jié)束后無(wú)條件執(zhí)行的語(yǔ)句。
盡管沒(méi)有錯(cuò)誤發(fā)生finally塊中的語(yǔ)句也會(huì)在最后得到執(zhí)行,通常在此放置資源清理的程序代碼。
遍歷一個(gè)有蘋(píng)果名稱(chēng)的數(shù)組時(shí)人為引發(fā)一個(gè)異常。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <script type="text/javascript"> try{ var fruit = new Array("鴨梨","蘋(píng)果","葡萄","李子"); for( n=0;n<fruit.length;m++) { document.write(fruit[n] + ""); } } catch( e ) { alert( (e.number&0xFFFF) + "號(hào)錯(cuò)誤:" + e.description ); } finally{ fruit = null; alert("fruit="+fruit+"已經(jīng)斷開(kāi)fruit數(shù)組的引用!"); } </script>新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注