DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> JavaScript高級程序設計 錯誤處理與調試學習筆記
JavaScript高級程序設計 錯誤處理與調試學習筆記
編輯:關於JavaScript     
第十四章 錯誤處理與調試
1.開啟浏覽器錯誤報告
1.1 Internet Explorer
□Toos → Internet Option → Anvanced → Display a notification about every script error
1.2 Firefox
□Tools → Error Console (Firebug)
1.3 Safari
□Edit → Preferences → Advanced → Show develop menu in menubar/Develop → Show Error Console
1.4 Opera
□Tools → Advanced → Error Console
1.5 Chrome
□Control this page → Developer → JavaScript console
2.錯誤處理
2.1 Try-catch語句
try{
//可能會導致錯誤的代碼
}catch(error){
//錯誤發生時怎麼處理
}
□錯誤發生時catch快回收到一個包含錯誤信息的對象。有一個兼容所有浏覽器的message屬性。
2.1.1 finally子句
try-catch子句可選,finally子句一經使用,其代碼無論如何都會執行。
2.1.2 錯誤類型
□Error:基類型。主要目的是供開發人員拋出自定義錯誤。
□EvalError:用eval()函數發生異常時拋出。
□RangeError:數值超出相應范圍時觸發。
□ReferenceError:找不到對象的情況下
□SyntaxError:把語法錯誤的JavaScript字符串傳入eval()函數。
□TypeError:變量中保存著意外的類型時,或訪問不存在的方法時。
□URIError:使用encodeURI()或decodeURI(),而URI格式不正確時。
根據不同的錯誤類型,進行錯誤處理:
try{
soemFunction();
}catch(error){
if(error instanceof TypeError){
//處理類型錯誤
}else if(error instanceof ReferenceError){
//處理引用錯誤
}else{
//處理其他類型錯誤
}
}
2.1.3 善用try-catch
□使用try-catch語句,浏覽器會認為錯誤已經被處理。
□使用try-catch語句,最適用吹那些我們無法控制的錯誤。
□明明白白地知道自己代碼發生錯誤就不該用try-catch而是修復錯誤。
2.2 拋出錯誤
①與try-catch語句相配有一個throw操作符。在遇到throw操作符時,代碼立即停止執行。僅當有try-catch語句捕獲到被拋出的值時,代碼才會繼續執行。
②throw new Error("something bad happened."); 或利用原型鏈通過繼承Error來創建自定義錯誤類型。
2.2.1 拋出錯誤的時機
2.2.2 拋出錯誤與使用try-catch
2.2.3 錯誤(error)事件
①任何沒有通過try-catch處理的錯誤都會觸發window對象的error事件。
②任何浏覽器中,onerror事件處理程序都不會創建event對象。但可接受3個參數:錯誤消息、錯誤所在的URL和行號。(只有錯誤消息有用)
③指定onerror事件處理程序,必須使用DOM0級技術。
window.onerror = function(message,url,line){
alert(message);
return false; //通過返回false,此函數實際上充當了整個文檔的try-catch語句可捕獲所有無代碼處理的運行時錯誤。
};
④圖像也支持error事件。只要圖像的src特性中URL不能返回可以被識別的圖像格式,就會觸發error事件。此時的error事件遵循DOM格式,會返回一個以圖像為目標的event對象。
3.錯誤處理策略
3.1 常見的錯誤類型
□類型轉換錯誤
□數據類型錯誤
□通信錯誤
3.1.1 類型轉換錯誤
類型轉換錯誤發生在使用某個操作符,或者使用其他可能會自動轉換值的數據類型的語言結構時。在使用相等(==)和不相等(!==)操作符,或者if、for及while等流控制語句中使用非布爾值時,最常發生類型轉換錯誤。
3.1.2 數據類型錯誤
在預料之外的值傳給函數的情況下,最容易發生數據類型錯誤。
3.1.3 通信錯誤
①URL格式不正確或發送的數據有問題。對查詢字符串,必須使用encodeURIComponent()方法。
②在服務器響應的數據不正確時,也會發生通信錯誤。
3.2 區分致命錯誤和非致命錯誤
①非致命錯誤
□不影響用戶的主要任務
□只影響頁面的一部分
□可以恢復
□重復相同操作可以消除錯誤
②致命錯誤
□應用程序根本無法運行
□錯誤明顯影響到了用戶的主要操作
□會導致其他連帶錯誤
3.3把錯誤記錄到服務器:(略)
4.調試技術
4.1 將消息記錄到控制台
①IE8、Firefox、Chrome和Safari來說,可通過console對象向JavaScript控制台中寫入消息。對象有下列方法:
□error(message):將錯誤消息記錄到控制台
□info(message):將信息消息記錄到控制台
□log(message):將一般消息記錄到控制台
□warn(message):將警告消息記錄到控制台
②還有一種方案是使用LiveConnect,也就是JavaScript中運行Java代碼。
③向JavaScript控制台寫入消息的統一接口:
function log(message){
if(typeof console == "object"){
console.log(message);
}else if(typeof opera == "object"){
opera.postError(message);
}else if(typeof java == "object" && typeof java.lang == "object"){
java.lang.System.out.println(message);
}
}
4.2 將消息記錄到當前頁面
4.3 拋出錯誤
①對大型應用程序來說,自定義的錯誤通常使用assert()函數拋出。對這個函數接受兩個參數,一個是求值結果為true的條件,另一個是條件為false時要拋出的錯誤。
function assert(condition, message){
if(!condition){
throw new Error(message);
}
}
②應用:
function divide(num1,num2){
assert(typeof num1 == "number"&&typeof num2== "number","divide():Both arguments must be numbers.");
return num1/num2;
}
5.常見的IE錯誤
□操作終止
□無效字符
□未找到成員
□未知運行時錯誤
□語法錯誤
□系統無法找到指定資源
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved