<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 14, 文章 - 39, 評論 - 17, 引用 - 0
    數(shù)據(jù)加載中……

    javascript 異常處理 [轉(zhuǎn)]

    異常 處理概述
    在代碼的運(yùn)行過程中,錯(cuò)誤是不可避免的,總的來說,錯(cuò)誤發(fā)生于兩種情況:一是程序內(nèi)部的邏輯或者語法錯(cuò)誤,二是運(yùn)行環(huán)境或者用戶輸入中不可預(yù)知的數(shù)據(jù)造成的錯(cuò)誤。對于前者,就稱之為錯(cuò)誤(error),可以通過調(diào)試程序來解決;而后一種則更多的稱之為異常(exception),顧名思義,就是超出常規(guī),沒有按程序設(shè)計(jì)的意愿來輸入數(shù)據(jù)。當(dāng)然,異常還會有許多種類型。
    所以說,異常并不等價(jià)于錯(cuò)誤,相反,有時(shí)還會利用異常來解決一些問題。JavaScript可以捕獲一個(gè)異常并進(jìn)行相應(yīng)的處理,從而避免了瀏覽器向用戶報(bào)錯(cuò)。

    使用try-catch-finally處理異常
    用戶可以使用該結(jié)構(gòu)處理可能發(fā)生異常的代碼,如果發(fā)生異常,則由catch捕獲并進(jìn)行處理,其語法如下:
    try{
    ?????? //要執(zhí)行的代碼
    }
    catch(e){
    ?????? //處理異常的代碼
    }
    finally{
    ?????? //無論異常發(fā)生與否,都會執(zhí)行的代碼
    }
    通過異常處理,可以避免程序停止運(yùn)行,從而具有了一定的自我修復(fù)能力。
    在Ajax開發(fā)中,利用異常處理的一個(gè)典型應(yīng)用就是創(chuàng)建XMLHttpRequest對象,不同瀏覽器創(chuàng)建它的方式是不一樣的,為了使代碼能夠跨瀏覽器運(yùn)行,就可以利用異常,一種方法不行,再用另一種方法,直到不發(fā)生異常為止,例如:
    <script language="JavaScript" type="text/javascript">
    <!--
    var xmlhttp;
    try{
    ????? //嘗試用IE瀏覽器的方式創(chuàng)建XMLHttpRequest對象
    ????? xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }catch(e){
    ????? try{
    ?????????? //嘗試用非IE瀏覽器的方式常見XMLHttpRequest對象
    ?????????? xmlhttp=new XMLHttpRequest();
    ????? }catch(e){}
    }
    //-->
    </script>
    通過這種方式,就可以跨瀏覽器創(chuàng)建XMLHttpRequest對象。注意,即使不在catch塊內(nèi)進(jìn)行處理,catch標(biāo)識及其參數(shù)e也是必須寫的,否則會產(chǎn)生語法錯(cuò)誤,而finnally則不是必須的。

    使用throw語句拋出異常
    JavaScript中有其內(nèi)部的異常機(jī)制,在遇到非法操作時(shí)能自動拋出異常。實(shí)際的開發(fā)中,隨著程序的復(fù)雜,需要能自己實(shí)現(xiàn)異常,這可以通過throw語句來實(shí)現(xiàn):
    throw value;
    其中value就是要拋出的異常變量,它可以是JavaScript中的任何一種類型。但在JavaScript內(nèi)部的異常中,異常參數(shù)(即catch(e)中的e)是一個(gè)名為error的對象,可以通過new Error(message)來創(chuàng)建這個(gè)對象,異常的描述被作為error對象的一個(gè)屬性message,可以由構(gòu)造函數(shù)傳入,也可以之后賦值。通過這個(gè)異常描述message,可以讓程序獲取異常的詳細(xì)信息,從而自動處理
    下面的程序計(jì)算兩個(gè)數(shù)據(jù)的和,如果參數(shù)不是數(shù)字,則拋出異常,代碼如下:
    <script language="JavaScript" type="text/javascript">
    <!--
    //函數(shù)默認(rèn)要求參數(shù)為數(shù)字
    function sum(a,b){
    ????? a=parseInt(a);
    ????? b=parseInt(b);
    ????? //如果a或b不能轉(zhuǎn)換為數(shù)字則拋出一個(gè)異常對象
    ????? if(isNaN(a) || isNaN(b)){
    ????????????? throw new Error("arguments are not numbers");
    ????? }
    ????? return a+b;
    }

    try{
    ????? //錯(cuò)誤的調(diào)用
    ????? var s=sum("c","d");
    }catch(e){
    ????? //顯示異常的詳細(xì)信息
    ????? alert(e.message);
    }
    //-->
    </script>
    程序中使用字母作為參數(shù)傳遞給sum函數(shù),是錯(cuò)誤的,所以函數(shù)內(nèi)拋出了一個(gè)異常對象,這個(gè)對象被catch語句獲取,并使用alert語句顯示了其詳細(xì)信息。
    注意:使用new Error(message)創(chuàng)建異常對象只是一種默認(rèn)的習(xí)慣,也是內(nèi)置異常的實(shí)現(xiàn)方式。這不是必需的,完全可以拋出任意數(shù)據(jù)類型的異常,例如一個(gè)整數(shù),來作為異常的描述。只要在程序中拋出異常和捕獲異常能匹配即可。

    Error對象除了message屬性以外,還有一些其他的屬性,這些屬性因?yàn)g覽器而異,例如:在IE瀏覽器中,error對象的屬性包括name、number、description、message;而在Firefox瀏覽器中,error對象的屬性包括message、fileName、lineNumber、stack、name。在實(shí)際的應(yīng)用中如果要實(shí)現(xiàn)自己的異常,這些屬性只要被賦值,都是可用的,其中Firefox瀏覽器還會自動對stack屬性賦值,用于顯示異常出現(xiàn)的位置。



    posted on 2007-02-15 11:18 mlw2000 閱讀(249) 評論(0)  編輯  收藏 所屬分類: JavaScript

    主站蜘蛛池模板: 国产三级电影免费观看| 亚欧免费一级毛片| 成人一a毛片免费视频| 亚洲精品视频观看| 久久国产精品成人免费| 亚洲成在人天堂在线| 99精品视频免费| 亚洲好看的理论片电影| 最好看最新的中文字幕免费| 亚洲精品成人网站在线播放| 黄+色+性+人免费| 亚洲日本香蕉视频| 青青视频观看免费99| 在线亚洲午夜片AV大片| 国内一级一级毛片a免费| 亚洲AV无码一区二区三区性色| 国产乱弄免费视频| 污网站在线观看免费| 在线观看午夜亚洲一区| 久久永久免费人妻精品| 亚洲国产成+人+综合| 性一交一乱一视频免费看| 免费国产高清毛不卡片基地| 亚洲中文字幕不卡无码| 1000部禁片黄的免费看| 亚洲精品无码专区在线| 亚洲精品97久久中文字幕无码| 99久久国产精品免费一区二区| 亚洲天堂2016| 四虎精品亚洲一区二区三区| 亚洲免费日韩无码系列| 成人性生交大片免费看好| 亚洲免费中文字幕| 四虎永久免费影院| 免费无码黄网站在线看| 色偷偷亚洲女人天堂观看欧| 国产一区二区三区免费视频| 久久免费视频网站| 97se亚洲国产综合自在线| 亚洲熟伦熟女新五十路熟妇 | 深夜福利在线视频免费|