js基础——错误处理
一:错误捕获
1.try-catch 语句(错误捕获)
try{
//这里放置可能出现问题的代码
}catch(error){
//错误发生时执行的代码
console.log(error.name) //打印错误类型
console.log(error.message) //打印错误消息
}
说明:如果try中的代码出现任何错误,就会立即退出代码执行过程,接着执行catch块。执行过catch块之后,浏览器默认错误已经处理。
2.finally 字句
try{
}catch(error){
}finally{
}
说明:无论try里面的语句有没有报错,catch里面的语句有没有执行到,都会执行finally语句
例:
function test(){
try{
return 1
}catch(error){
return 2
}finally{
return 0
}
}
执行test函数,始终会返回0 因为最终都会执行finally块。
3.错误类型
error:基类型,所有错误都继承该类型
evalerror:使用eval()函数(该函数可以执行js代码语句)异常时候抛出。通常是没有直接调用该函数会导致该错误
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;
};
执行该函数需要传递一个数组类型的参数
首先验证参数是不是数组,如果不是数组则抛出错误
总结:捕获错误的目的为了防止浏览器以默认的行为处理错误,抛出错误的目的是可以获取详细具体的错误信息