1. 程式人生 > >JavaScript處理錯誤

JavaScript處理錯誤

1.錯誤型別:





[javascript] view plain copy

 在CODE上檢視程式碼片派生到我的程式碼片01.//RangeError、ReferenceError、TypeError、URIError  
02.try{  
03.    someFunction();  
04.}catch(error){  
05.    if(error instanceof TypeError){  
06.        //處理型別錯誤  
07.    }else if(error instanceof ReferenceError){  
08.        //處理引用錯誤  
09.    }else if(error instanceof RangeError){  
10.        //處理超出範圍錯誤  
11.    }else if(error instanceof URIError){  
12.        //處理URI格式錯誤  
13.    }else{  
14.        //處理其他型別錯誤  
15.    }  
16.}  
2.自定義錯誤型別:





[javascript] view plain copy

 在CODE上檢視程式碼片派生到我的程式碼片01.//自定義錯誤型別  
02.function CustomError(message){  
03.    this.name="CustomError";  
04.    this.message=message;  
05.}  



[javascript] view plain copy

 在CODE上檢視程式碼片派生到我的程式碼片01.CustomError.prototype=new Error();  
02.throw new CustomError("我的資訊");  
3.丟擲錯誤的時機





[javascript] view plain copy

 在CODE上檢視程式碼片派生到我的程式碼片01.function process(values){  
02.    if(!(values instanceof Array)){  
03.        throw new Error('process():引數必須是一個數組。');  
04.    }  
05.    values.sort();  
06.    for(var i=0,len=values.length;i<len;i++){  
07.        if(values[i]>100){  
08.            return values[i];  
09.        }  
10.    }  
11.    return -1;  
12.}  
4.避免型別轉換錯誤





[javascript] view plain copy

 在CODE上檢視程式碼片派生到我的程式碼片01.//避免在流控制語句中使用非布林值  
02.function concat(str1,str2,str3){  
03.    var result=str1+str2;  
04.    if(typeof str3=="string"){  
05.        result+=str3;  
06.    }  
07.    return result;  
08.}  
5.避免資料型別轉換錯誤





[javascript] view plain copy

 在CODE上檢視程式碼片派生到我的程式碼片01.//基本型別的值應該用typeof來檢測  
02.function getQueryString(url){  
03.    if(typeof url=="string"){  
04.        var pos=url.indexOf("?");  
05.        if(pos>-1){  
06.            return url.substring(pos+1);  
07.        }  
08.    }  
09.}  
10.//物件的值應該使用instanceof來檢測  
11.function reverseSort(values){  
12.    if(values instanceof Array){  
13.        values.sort();  
14.        values.reverse();  
15.    }  
16.}  
6.避免通訊錯誤





[javascript] view plain copy

 在CODE上檢視程式碼片派生到我的程式碼片01.//避免通訊錯誤:對於查詢字串,必須要使用encodeURIComponent()方法  
02.function addQueryStringArg(url,name,value){  
03.    if(url.indexOf('?')==-1){  
04.        url+='?';  
05.    }else{  
06.        url+='&';  
07.    }  
08.    url+=encodeURIComponent(name)+'='+encodeURIComponent(value);  
09.    return url;  
10.}  



[javascript] view plain copy

 在CODE上檢視程式碼片派生到我的程式碼片01.var url="http://www.somedomain.com";  
02.var newUrl=addQueryStringArg(url,'redir','http://www.somedomain.com?a=b&c=d');  
7.把錯誤記錄到伺服器





[javascript] view plain copy

 在CODE上檢視程式碼片派生到我的程式碼片01.//把錯誤記錄到伺服器  
02.function logError(sev,msg){  
03.    var img=new Image();  
04.    img.src='log.php?sev='+encodeURIComponent(sev)+'&msg='+encodeURIComponent(msg);  
05.}  



[javascript] view plain copy

 在CODE上檢視程式碼片派生到我的程式碼片01.for(var i=0,len=mods.length;i<len;i++){  
02.    try{  
03.        mods[i].init();  
04.    }catch(ex){  
05.        logError('非致命錯誤','模組初始化失敗:'+ex.message);  
06.    }  
07.}