JavaScript异常处理
一:异常处理
【错误类型】
Error(错误)表示系统级的错误和程序不必处理的异常,是 JavaScript 运行环境中的内部错误或者硬件问题,比如,内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择。
- 系统错误
- 程序错误
- 用户错用
【异常】
所谓异常,表示需要捕捉或者需要程序进行处理的地方,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。
【error对象】
创建错误
let err = new Error();
Error属性
console.log(err.name);
console.log(err.message);
console.log(err.stack);
【error类型】
-
EvalError eval方法引起的错误
-
RangeError 超出范围引发的错误
-
ReferenceError 引用不存在的变量引发错误
let obj = null; //引发引用不存在的错误 ReferenceError: acc is not defined console.log(acc.toString());
-
SyntaxError 语法错误
let obj = null; //语法错误 SyntaxError: Unexpected end of input let a=
-
TypeError 变量中保存了意外的类型引发的错误
let obj = null; // 引发类型错误 TypeError: Cannot read property 'toString' of null console.log(obj.toString());
-
URIError 执行URI相关函数的参数不正确引发的错误
【异常的抛出和捕获】
- 抛出异常
- throw
- 捕获异常
- try 可能会引发异常的代码块
- catch 处理异常的代码块
- finally 无论有没有异常都会执行的代码块
【通过try-catch-finally处理错误】
* try块用来尝试运行可能出现错误的代码
* 如果try块中的代码出现错误,那么程序会执行catch中的代码
* 如果try块中的代码没有错误,那么程序会将try块中的代码执行完
* finally块是可选的代码块,它表示无论如何都会执行的代码块,一般来讲把他用来关闭各种链接或清理操作
* throw表示抛出异常,可以将捕获的异常跑到外面的方法继续处理
try{
// let a = 1;
console.log(a);
}catch(err){
console.log(`错误:${err.name},${err.message}`);
}finally{ //无论如何都要执行
console.log(`执行finally`);
}
console.log(`你好`);
let func = ()=>{
try{
// let a = 1;
console.log(a);
return;
}catch(err){
console.log(`错误:${err.name},${err.message}`);
throw err; //抛出异常,就会显示出错误
// return;
}finally{ //无论如何都要执行
console.log(`执行finally`);
//return;
}
console.log(`你好`);
}
func();
console.log(`结束运行`);
//当三个return都打开时,执行的结果是
/*错误:ReferenceError,a is not defined
执行finally
结束运行*/
【警告】
如果代码中一个错误不足以导致程序崩溃,就会发出一条警告(warning)。也就是说,程序在产生一条警告后,会继续向下运行。这听起来感觉挺不错的,但是有些时候也有问题,那是因为产生警告的问题会导致程序不按照我们预期的效果来继续执行。