一:错误捕获javascript
1.try-catch 语句(错误捕获)java
try{ //这里放置可能出现问题的代码 }catch(error){ //错误发生时执行的代码 console.log(error.name) //打印错误类型 console.log(error.message) //打印错误消息 }
说明:若是try中的代码出现任何错误,就会当即退出代码执行过程,接着执行catch块。执行过catch块以后,浏览器默认错误已经处理。数组
2.finally 字句浏览器
try{ }catch(error){ }finally{ }
说明:不管try里面的语句有没有报错,catch里面的语句有没有执行到,都会执行finally语句函数
例:this
function test(){ try{ return 1 }catch(error){ return 2 }finally{ return 0 } }
执行test函数,始终会返回0 由于最终都会执行finally块。
3.错误类型prototype
Error:基类型,全部错误都继承该类型对象
EvalError:使用eval()函数(该函数能够执行js代码语句)异常时候抛出。一般是没有直接调用该函数会致使该错误blog
RangeError:数值超出相应范围触发 例如:定义一个长度为 -20 位的数组 var array = new Array(-20)继承
ReferenceError:找不到对象时触发 例如:var obj = x 在变量x未定义的状况下 抛出错误
SyntaxError:传入eval()函数的代码出现错误时抛出
TypeError:最多见,执行特定类型的操做时,变量的类型不符合要求致使 例如:访问不存在的方法、变量中保存着意外的类型
总结:何时试用try-catch语句捕获错误?
一般在大型的项目中,或者使用别人的库,源代码不能修改 处理那些咱们没法控制的错误。
当你明确本身的代码在什么时候何地会出现什么错误,使用try-catch语句就不太合适了
二:错误抛出
1.throw 使用throw 操做符代码会当即中止执行,除非使用try-catch捕获错误
基本语法 throw new Error('您要自定义的错误信息') throw new TypeError()...................
自定义错误类型
function MyError(message){ this.name = MyError this.message = message } MyError.prototype = new Error() //继承Error 由于Error是全部错误类型的基类 使用:throw new MyError('我本身定义的错误类型')
完整案例:
function test(array){ if(!(array instanceof Array)){ throw new Error('参数不是数组') } array.sort(); for(var i = 0;i<array.length;i++){ if(array[i]>100){ return array[i]; } } return -1; }; 执行该函数须要传递一个数组类型的参数 首先验证参数是否是数组,若是不是数组则抛出错误
总结:捕获错误的目的为了防止浏览器以默认的行为处理错误,抛出错误的目的是能够获取详细具体的错误信息