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);
}
}