JavaScript如何處理錯誤
阿新 • • 發佈:2019-01-04
1.錯誤型別:
2.自定義錯誤型別://RangeError、ReferenceError、TypeError、URIError try{ someFunction(); }catch(error){ if(error instanceof TypeError){ //處理型別錯誤 }else if(error instanceof ReferenceError){ //處理引用錯誤 }else if(error instanceof RangeError){ //處理超出範圍錯誤 }else if(error instanceof URIError){ //處理URI格式錯誤 }else{ //處理其他型別錯誤 } }
//自定義錯誤型別
function CustomError(message){
this.name="CustomError";
this.message=message;
}
CustomError.prototype=new Error();
throw new CustomError("我的資訊");
3.丟擲錯誤的時機
4.避免型別轉換錯誤function process(values){ if(!(values instanceof Array)){ throw new Error('process():引數必須是一個數組。'); } values.sort(); for(var i=0,len=values.length;i<len;i++){ if(values[i]>100){ return values[i]; } } return -1; }
//避免在流控制語句中使用非布林值
function concat(str1,str2,str3){
var result=str1+str2;
if(typeof str3=="string"){
result+=str3;
}
return result;
}
5.避免資料型別轉換錯誤
6.避免通訊錯誤//基本型別的值應該用typeof來檢測 function getQueryString(url){ if(typeof url=="string"){ var pos=url.indexOf("?"); if(pos>-1){ return url.substring(pos+1); } } } //物件的值應該使用instanceof來檢測 function reverseSort(values){ if(values instanceof Array){ values.sort(); values.reverse(); } }
//避免通訊錯誤:對於查詢字串,必須要使用encodeURIComponent()方法
function addQueryStringArg(url,name,value){
if(url.indexOf('?')==-1){
url+='?';
}else{
url+='&';
}
url+=encodeURIComponent(name)+'='+encodeURIComponent(value);
return url;
}
var url="http://www.somedomain.com";
var newUrl=addQueryStringArg(url,'redir','http://www.somedomain.com?a=b&c=d');
7.把錯誤記錄到伺服器
//把錯誤記錄到伺服器
function logError(sev,msg){
var img=new Image();
img.src='log.php?sev='+encodeURIComponent(sev)+'&msg='+encodeURIComponent(msg);
}
for(var i=0,len=mods.length;i<len;i++){
try{
mods[i].init();
}catch(ex){
logError('非致命錯誤','模組初始化失敗:'+ex.message);
}
}