JavaScript错误和异常
1.Error对象
表示一个错误,代码运行中发生错误时,会创建Error对象并抛出。
创建错误:
new Error([message],[filename],[lineNumber])
Error类型:
- EvalError 与eval相关的错误
- InternalError javascript引擎内部错误,如递归太多
- RangeError 数值变量或参数超出有效范围
- ReferenceError 无效引用
- SyntaxError 语法错误
- TypeError 变量或参数不属于有效类型
- URIError 给encodeURI()或decodeURI传递的参数无效
Error.prototype主要属性
- name:'Error'
- message 错误信息
- stack 错误跟踪
2.处理异常
try catch语句可以处理异常。有三种结构:
- try catch
- try finally
- try catch finally
try中异常发生就不再执行剩余代码,转而执行catch。
1 try{ //需要被执行的语句 2 console.log('begin'); 3 throw new Error('hoho!'); 4 //throw new Error('hoho!','test.html','28'); 设置了也没用 5 console.log('after'); //不会被执行 6 } 7 catch(err){ //try中有异常时执行的语句 8 console.error(err.stack); //Error: hoho! at test.html:29 9 //console.log(err.name+":"+err.message); //Error:hoho! 10 } 11 finally{ //无论是否有异常都会执行的语句 12 console.log('end.'); 13 }
try嵌套时,异常被最近的catch捕获一次。catch中能向外抛出新异常。inally中有return将结束整个try,不再处理异常。
1 try{ 2 try{ 3 throw new Error('hoho!'); 4 } catch(err){ 5 console.error('inner',err.message); 6 throw err; 7 } finally{ 8 console.log('end'); 9 } 10 } catch(err){ 11 console.error('outer',err.message); 12 } 13 //output: 14 //end 15 //inner hoho! 16 //outer hoho!
4.监听所有异常
1 window.onerror = function(message,source,lineNumber,rowNumber,error){ //参数以Chrome为例 2 3 console.log('处理错误...'); 4 5 return true; //true不提示错误,flase提示错误 6 } 7 8 //allert(1);