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

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

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

    乖,別哭的薄殼
    ~一份耕耘,一份收獲~
    posts - 23,comments - 260,trackbacks - 0

    1.onerror事件處理函數(shù)
    onerror事件處理函數(shù)是第一個(gè)用來(lái)協(xié)助javascript處理錯(cuò)誤的機(jī)制。頁(yè)面上出現(xiàn)異常時(shí),error事件便在window對(duì)象上觸發(fā)。
    例如:

    <html>
        
    <head>
            
    <title>OnError Example</title>
            
    <script type="text/javascript">
                window.onerror 
    = function () {
                    alert(
    "An error occurred.");
                }
            
    </script>
        
    </head>
        
    <body onload="nonExistentFunction()">
        
    </body>
    </html>
    在這個(gè)例子中,嘗試調(diào)用不存在的函數(shù)nonExistentFunction()時(shí),就會(huì)引發(fā)一個(gè)異常。這時(shí)會(huì)彈出警告框顯示“An error occurred.”不幸的是,瀏覽器的錯(cuò)誤信息也顯示出來(lái)了,要從瀏覽器中隱藏它,onerror事件處理函數(shù)必須返回true值:如下
    <html>
        
    <head>
            
    <title>OnError Example</title>
            
    <script type="text/javascript">
                window.onerror 
    = function () {
                    alert(
    "An error occurred.");
                    
    return true;
                }
            
    </script>
        
    </head>
        
    <body onload="nonExistentFunction()">
        
    </body>
    </html>

    2.取出錯(cuò)誤信息
    onerror事件處理函數(shù)提供了三種信息來(lái)確定錯(cuò)誤確切的性質(zhì):
    錯(cuò)誤信息--對(duì)于給定錯(cuò)誤,瀏覽器會(huì)顯示同樣的信息。
    URL--在哪個(gè)文件中發(fā)生了錯(cuò)誤。
    行號(hào)--給定的URL中發(fā)生錯(cuò)誤的行號(hào)。
    <html>
        
    <head>
            
    <title>OnError Example</title>
            
    <script type="text/javascript">
                window.onerror 
    = function (sMessage, sUrl, sLine) {
                    alert(
    "An error occurred:\n" + sMessage + "\nURL: " + sUrl + "\nLine Number: " + sLine);
                    
    return true;
                }
            
    </script>
        
    </head>
        
    <body onload="nonExistentFunction()">
        
    </body>
    </html>

    3.圖像載入錯(cuò)誤
    圖像對(duì)象也支持onerror事件處理函數(shù)。當(dāng)一個(gè)圖像由于某種原因未能成功載入時(shí)(例如,文件不存在),error事件便在這個(gè)圖像上觸發(fā)。
    <html>
        
    <head>
            
    <title>Image Error Test</title>
        
    </head>
        
    <body>
            
    <p>The image below attempts to load a file that doesn't exist.</p>
            
    <img src="blue.gif" onerror="alert('An error occurred loading the image.')" />
        
    </body>
    </html>

    與window對(duì)象的onerror事件處理函數(shù)不同,image的onerror事件處理函數(shù)沒(méi)有任務(wù)關(guān)于額外信息的參數(shù)。

    4.處理語(yǔ)法錯(cuò)誤
    onerror事件處理函數(shù)不僅可以處理異常,它還能處理語(yǔ)法錯(cuò)誤,也只有它才能處理。
    <html>
        
    <head>
            
    <title>OnError Example</title>
            
    <script type="text/javascript">
                window.onerror 
    = function (sMessage, sUrl, sLine) {
                    alert(
    "An error occurred:\n" + sMessage + "\nURL: " + sUrl + "\nLine Number: " + sLine);
                    
    return true;
                }
                alert(
    "Syntax error.";
            
    </script>
        
    </head>
        
    <body onload="nonExistentFunction()">
            
    <p>The syntax error on this page comes <em>after</em> the <code>onerror</code>
            event handler is defined, so the custom dialog catches it.
    </p>
            
    <p><strong>Note:</strong> This may not work in newer browsers with tighter security restrictions.</p>
        
    </body>
    </html>

    注:使用onerror事件處理函數(shù)的主要問(wèn)題是,它是BOM的一部分,所以,沒(méi)有任何標(biāo)準(zhǔn)能控制它的行為。因此,不同的瀏覽器使用這個(gè)事件處理函數(shù)處理錯(cuò)誤的方式有明顯的不同。例如,在IE中發(fā)生error事件時(shí),正常的代碼會(huì)繼續(xù)執(zhí)行:所有的變量和數(shù)據(jù)都保存下來(lái),并可能過(guò)onerror事件處理函數(shù)訪問(wèn)。然而在Mozilla中,正常的代碼執(zhí)行都會(huì)結(jié)束,同時(shí)所有錯(cuò)誤發(fā)生之前的變量和數(shù)據(jù)都被銷(xiāo)毀。Safari和Konqueror不支持window對(duì)象上的onerror事件處理函數(shù),但是它們支持圖像上的onerror事件處理函數(shù)。

    5.try...catch語(yǔ)句
    <html>
        
    <head>
            
    <title>Try Catch Example</title>
            
    <script type="text/javascript">
                    
    try {
                        window.nonExistentFunction();
                        alert(
    "Method completed.");
                    } 
    catch (exception) {
                        alert(
    "An exception occurred.");
                    } 
    finally {
                        alert(
    "End of try...catch test.");
                    }
            
    </script>
        
    </head>
        
    <body>
        
    </body>
    </html>

    與java不同,ECMAScript標(biāo)準(zhǔn)在try...catch語(yǔ)句中指定只能有一個(gè)catch子句。因?yàn)閖avascript是弱類型,沒(méi)辦法指明catch子句中的異常的特定類型。不管錯(cuò)誤是什么類型,都由同一個(gè)catch子句處理。Mozilla對(duì)其進(jìn)行了擴(kuò)展,可為try...catch語(yǔ)句添加多個(gè)catch子句。當(dāng)然只有Mozilla才能使用這個(gè)形式,所以不推薦使用。

    (1)嵌套try...catch語(yǔ)句
    <html>
        
    <head>
            
    <title>Try Catch Example</title>
            
    <script type="text/javascript">
                    
    try {
                        eval(
    "a ++ b");        //causes error
                    } catch (oException) {
                        alert(
    "An exception occurred.");
                        
    try {
                            
    var arrErrors = new Array(10000000000000000000000);  //causes error
                            arrErrors.push(exception);
                        } 
    catch (oException2) {
                            alert(
    "Another exception occurred.");
                        }
                    } 
    finally {
                        alert(
    "All done.");
                    }

            
    </script>
        
    </head>
        
    <body>
        
    </body>
    </html>
    (2)Error對(duì)象
    類似于java有個(gè)用于拋出的基類Exception,javascript有個(gè)Error基類用于拋出。Error對(duì)象有以下特性:
    name--表示錯(cuò)誤類型的字符串。
    message--實(shí)際的錯(cuò)誤信息。
    Error對(duì)象的名稱對(duì)象對(duì)應(yīng)于它的類(因?yàn)镋rror只是一個(gè)基類),可以是以下值之一:
    發(fā)生原因
    EvalError 錯(cuò)誤發(fā)生在eval()函數(shù)中
    RangeError 數(shù)字的值超出javascript可表示的范圍
    ReferenceError 使用了非法的引用
    SyntaxError 在eval()函數(shù)調(diào)用中發(fā)生了語(yǔ)法錯(cuò)誤。其他的語(yǔ)法錯(cuò)誤由瀏覽器報(bào)告,無(wú)法通過(guò)try...catch語(yǔ)句處理
    TypeError 變量的類型不是預(yù)期所需的
    URIError 在encodeURI()或者decodeURI()函數(shù)中發(fā)生了錯(cuò)誤

    Mozilla和IE都擴(kuò)展了Erro對(duì)象以適應(yīng)各自的需求。Mozilla提供一個(gè)fileName特性來(lái)表示錯(cuò)誤發(fā)生在哪一個(gè)文件中,以及一個(gè)stack特性以包含到錯(cuò)誤發(fā)生時(shí)的調(diào)用堆棧;IE提供了一個(gè)number特性來(lái)表示錯(cuò)誤代號(hào)。
    (3)判斷錯(cuò)誤類型
    <html>
        
    <head>
            
    <title>Try Catch Example</title>
            
    <script type="text/javascript">
                    
    try {
                        eval(
    "a ++ b");        //causes SyntaxError
                    } catch (oException) {
                        
    if (oException.name == "SyntaxError") {      //或者if(oException instanceof SyntaxError)
                            alert(
    "Syntax Error: " + oException.message);
                        } 
    else {
                            alert(
    "An unexpected error occurred: " + oException.message);
                        }
                    }

            
    </script>
        
    </head>
        
    <body>
        
    </body>
    </html>

    (4)拋出異常
    ECMAScript第三版還引入了throw語(yǔ)句,用于有目的的拋出異常。語(yǔ)法如下:
    throw error_object;      //error_object可以是字符串、數(shù)字、布爾值或者是實(shí)際的對(duì)象。
    <html>
        
    <head>
            
    <title>Try Catch Example</title>
            
    <script type="text/javascript">
                    
    function addTwoNumbers(a, b) {
                        
    if (arguments.length < 2) {
                            
    throw new Error("Two numbers are required.");
                        } 
    else {
                            
    return a + b;
                        }
                    }
                    
                    
    try {
                        result 
    = addTwoNumbers(90);
                    } 
    catch (oException) {
                        alert(oException.message);      
    //outputs "Two numbers are required."
                    }

            
    </script>
        
    </head>
        
    <body>
        
    </body>
    </html>

    另個(gè),因?yàn)闉g覽器不生成Error對(duì)象(它總是生成一個(gè)較精確的Error對(duì)象,比如RangeError),所以區(qū)分瀏覽器拋出的錯(cuò)誤和開(kāi)發(fā)人員拋出的錯(cuò)誤很簡(jiǎn)單,使用前面的技術(shù)就行了:
    try{
       result = addTwoNumber(90,parseInt(z));
    }catch(oException){
       if(oException instanceof SyntaxError){
          alert("Syntax Error: "+oException.message);
       }else if(oException instanceof Error){
          alert(oException.message);
       }
    }
    注意檢查instanceof Error必須是if語(yǔ)句中的最后一個(gè)條件,因?yàn)樗衅渌腻e(cuò)誤類都繼承于它(所以在檢測(cè)instanceof Error時(shí)都返回true)。

    所有的瀏覽器都可以報(bào)告開(kāi)發(fā)人員拋出的錯(cuò)誤,但是錯(cuò)誤消息的顯示方式可能有所不同。IE6只會(huì)在拋出Error對(duì)象時(shí),才顯示錯(cuò)誤信息;其他情況下,它就只顯示Exception thrown and not caught,而沒(méi)有任何詳細(xì)內(nèi)容。Mozilla則會(huì)報(bào)告Error:uncaught exception:然后調(diào)用所拋出的對(duì)象的toString()方法。
    posted on 2007-04-25 00:58 小祝 閱讀(2088) 評(píng)論(1)  編輯  收藏 所屬分類: Javascript

    FeedBack:
    # re: javascript學(xué)習(xí)筆記(八)--錯(cuò)誤處理
    2007-04-26 11:31 | 睿不可當(dāng)
    還能說(shuō)什么呢!?
    頂了!  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 亚洲一区二区三区播放在线| 麻豆国产VA免费精品高清在线| 国产真人无码作爱视频免费| 四虎影视无码永久免费| 羞羞视频免费网站在线看| 国产午夜无码片免费| 久久久久久久久久久免费精品 | 国产亚洲精品看片在线观看 | 免费99精品国产自在现线| 8x成人永久免费视频| **毛片免费观看久久精品| 日日麻批免费40分钟日本的| 国产大片线上免费观看| 国产成人免费爽爽爽视频| 免费国产黄线在线观看| 日本无吗免费一二区| 亚洲v国产v天堂a无码久久| 亚洲日韩人妻第一页| 亚洲宅男天堂在线观看无病毒| 久久精品国产精品亚洲色婷婷| 亚洲AV区无码字幕中文色| 亚洲免费一级视频| 亚洲av永久中文无码精品| 美女视频黄频a免费观看| 国内精品99亚洲免费高清| 久久免费看少妇高潮V片特黄| 亚洲视频在线免费看| AV免费网址在线观看| 午夜亚洲国产成人不卡在线| 亚洲日韩国产精品第一页一区| 久久久久久亚洲精品中文字幕 | 亚洲精品人成无码中文毛片| 亚洲三区在线观看无套内射| 久久夜色精品国产噜噜亚洲AV| 亚洲熟女乱色一区二区三区| 精品国产亚洲AV麻豆 | 亚洲欧美日韩久久精品| 免费人妻精品一区二区三区| 亚洲a一级免费视频| 大学生美女毛片免费视频| 国产午夜亚洲精品午夜鲁丝片|