完善的js错误处理机制

ECMA标准定义了下列7种错误类型:

  1. Error
    基类型,其他所有错误类型都继承自该类型,实际出现情况很少,大多抛出的是开发人员自定义错误;

  2. EvalError
    会在使用Eval()函数发生异常时抛出,例如没有把Eval()当做函数使用:

    new eval();
    eval = foo;
    //以上都会抛出EvalError
    
  3. RangeError
    在数值超出响应范围时触发,例如:

    var item1 = new Array(-20);
    var item2 = new Array(Number.MAX_VALUE)
    
  4. TypeError
    在变量中保存不存在的类型或访问不存在的方法,都会抛出这类型错误:

    var a = new 10;
    console.log(1 in 10);
    
  5. SyntaxError

    单纯的语法错误,出现频率很高
    
  6. ReferenceError

    找不到对象,访问不存在的变量时抛出此类错误
    
  7. URIError

    使用encodeURI()或deocdeURI(), 但URI格式不正确时导致此类错误
    

try-catch语句作为js种处理异常的标准方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Try{
//可能会出现错误的语句
}catch(error){
//若出现错误则捕获error,跳到这里
if(error instanceof TypeError){
//处理类型错误
}else if(error instanceof SyntaxError){
//处理语法错误
}else{
//。。。其他类型
}
} finally{
//可选,try,catch语句执行完都会执行finally里语句
}

适合处理我们无法控制的错误,例如函数传参类型不对,需要throw 错误信息

throw抛出自定义错误:

1
2
throw 123;
throw “something wrong!"

也可模拟类似的浏览器错误:

1
2
throw new SyntaxError(“custom syntax error!”);
//上述浏览器错误都可以throw出来

error事件

任何没有通过try-catch异常处理的错误都会触发window对象的error事件。
指定onerror事件处理程序,必须使用DOM0级事件,没有遵循DOM2级事件的标准格式

1
2
Window.onerror = function(message, url, line){
}