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

JavaScript如何處理錯誤

1.錯誤型別:

//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{
		//處理其他型別錯誤
	}
}
2.自定義錯誤型別:
//自定義錯誤型別
function CustomError(message){
	this.name="CustomError";
	this.message=message;
}
CustomError.prototype=new Error();
throw new CustomError("我的資訊");
3.丟擲錯誤的時機
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;
}
4.避免型別轉換錯誤
//避免在流控制語句中使用非布林值
function concat(str1,str2,str3){
	var result=str1+str2;
	if(typeof str3=="string"){
		result+=str3;
	}
	return result;
}
5.避免資料型別轉換錯誤
//基本型別的值應該用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();
	}
}
6.避免通訊錯誤
//避免通訊錯誤:對於查詢字串,必須要使用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);
	}
}