淺談JavaScript異常處理語(yǔ)句
程序運(yùn)行過(guò)程中難免會(huì)出錯(cuò),出錯(cuò)后的運(yùn)行結(jié)果往往是不正確的,因此運(yùn)行時(shí)出錯(cuò)的程序通常被強(qiáng)制中止。運(yùn)行時(shí)的錯(cuò)誤統(tǒng)稱為異常,為了能在錯(cuò)誤發(fā)生時(shí)得到一個(gè)處理的機(jī)會(huì),JavaScript提供了異常處理語(yǔ)句。包含try-catch、try-catch-finally和throw.
try-catch語(yǔ)句
try{
tryStatements
}
catch(exception){
catchStatements
}
參數(shù)說(shuō)明:
tryStatements:必選項(xiàng)??赡馨l(fā)生錯(cuò)誤的語(yǔ)句序列。
exception:必選項(xiàng)。任何變量名,用于引用錯(cuò)誤發(fā)生時(shí)的錯(cuò)誤對(duì)象。
catchStatements:可選項(xiàng)。錯(cuò)誤處理語(yǔ)句,用于處理tryStatements中發(fā)生的錯(cuò)誤。
編碼時(shí)通常將可能發(fā)生錯(cuò)誤的語(yǔ)句寫入try塊的花括號(hào)中,并在其后的catch塊中處理錯(cuò)誤。錯(cuò)誤信息包含在一個(gè)錯(cuò)誤對(duì)象(Error對(duì)象)里,通過(guò)exception的引用可以訪問(wèn)該對(duì)象。根據(jù)錯(cuò)誤對(duì)象中的錯(cuò)誤信息以確定如果處理。
<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ǔ)句
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è)有蘋果名稱的數(shù)組時(shí)人為引發(fā)一個(gè)異常。
<script type="text/javascript">
try{
var fruit = new Array("鴨梨","蘋果","葡萄","李子");
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>
該代碼段第5行使用一個(gè)未定義的變量m,人為引發(fā)一個(gè)異常。第11~13行捕捉異常并處理。第14~18行的finally塊清理資源,該語(yǔ)句無(wú)條件被執(zhí)行,可以保證fruit數(shù)組所占資源不被泄露。
throw語(yǔ)句
多個(gè)異常處理語(yǔ)句可以嵌套使用。當(dāng)多個(gè)結(jié)構(gòu)嵌套時(shí),處于里層try-catch語(yǔ)句不打算自己處理異常則可以將其拋出。父級(jí)try-catch語(yǔ)句可以接收到子級(jí)拋出的異常,拋出操作使用throw語(yǔ)句。
throw 表達(dá)式;
表達(dá)式的值是作為錯(cuò)誤信息對(duì)象傳出,該對(duì)象將被catch語(yǔ)句捕獲。throw語(yǔ)句可以使用在打算拋出異常的任意地方。
通常情況下0不能作為除數(shù),因此可以為除數(shù)為0定義一個(gè)異常并拋出。
<script>
try{
var dividend = 100; //被除數(shù)
var parts = 0; //除數(shù)
if( parts == 0){ //如果除數(shù)為0則拋出異常
throw "Error:parts is zero"; //拋出異常
}
alert("每人" + dividend/parts + "份"); //輸出提示信息
}
catch(e){ //此處將捕獲try塊中拋出的異常
alert(e); //用對(duì)話框輸出錯(cuò)誤對(duì)象的信息
}
</script>
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
相關(guān)文章
Javascript實(shí)現(xiàn)div的toggle效果實(shí)例分析
這篇文章主要介紹了Javascript實(shí)現(xiàn)div的toggle效果的方法,實(shí)例分析了采用純javascript實(shí)現(xiàn)toggle效果的相關(guān)技巧,需要的朋友可以參考下2015-06-06
如何讓easyui gridview 寬度自適應(yīng)窗口改變及fitColumns應(yīng)用
在使用Easyui GridView時(shí),如果要Gridview的寬度和窗口的寬度相同,只需要設(shè)置fitColumns: true即可,感興趣的你不要走開(kāi)啊,接下來(lái)為您詳細(xì)介紹2013-01-01
JavaScript代碼執(zhí)行的先后順序問(wèn)題
今天就給大家介紹一個(gè)特別基礎(chǔ)的東西,javascript中函數(shù)的一點(diǎn)兒小知識(shí)之js代碼的執(zhí)行順序問(wèn)題,需要的朋友參考下吧2017-10-10
javascript寫的異步加載js文件函數(shù)(支持?jǐn)?shù)組傳參)
這篇文章主要介紹了javascript寫的異步加載js文件函數(shù),同時(shí)支持單個(gè)文件和多個(gè)文件(數(shù)組傳參),但不兼容IE6,需要的朋友可以參考下2014-06-06
js判斷某個(gè)字符出現(xiàn)的次數(shù)的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇js判斷某個(gè)字符出現(xiàn)的次數(shù)的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
微信小程序圖片加載失敗時(shí)替換為默認(rèn)圖片的方法
這篇文章主要介紹了微信小程序圖片加載失敗時(shí)替換為默認(rèn)圖片的方法,本文分情況通過(guò)實(shí)例代碼給大家講解,需要的朋友可以參考下2019-12-12

