异常处理
异常处理可以使程序在流程上更加完善。
在 JavaScript 中可以使用 throw
抛出异常,使用 try ... catch
捕获错误。
1. throw
当出现 throw
时,程序将会中断执行。
2. try … catch
try {
alert('出错前');
throw '发生了一个错误!';
alert('出错后');
} catch (e) { // e 是错误信息,名字随意,符合变量命名规范就行
alert('出错了!错误是:' + e);
}
需要注意的是,以前 catch 后面的错误参数是必须接收的,否则会报错。
try {
alert('开始请求数据,loading 显示');
throw '没有网络';
alert('请求结果是:..编不下去了,反正到不了这里');
} catch (e) {
alert('出现错误:' + e);
} finally {
alert('关闭 loading');
}
3. 可以写条件的 catch 语句
部分文献记载了如下格式的 try … catch 语法。
try {
throw 'error';
} catch (e if e instanceof TypeError) {
console.log('TypeError');
} catch (e if e instanceof ReferenceError) {
console.log('ReferenceError');
} catch (e) {
console.log(e);
}
但目前主流浏览器基本都无法正常运行这种语法的 try … catch 语句,所以不要使用。
如果有类似的需求,可以使用 if 来代替。
try {
throw 'error';
} catch (e) {
if (e instanceof TypeError) {
console.log('TypeError');
} else if (e instanceof ReferenceError) {
console.log('ReferenceError');
} else {
console.log(e);
}
}
4. Error 对象
通常在使用 throw 抛出异常时,会抛出一个 Error
对象的实例。
和大部分内置对象一样,Error 实例也可以不使用 new
关键字创建。
抛出 Error 实例,可以得到出现异常的文件和对应的行号。
除了 Error
,还有几种预定义好语义的异常对象。
5. 其他异常对象
这些异常对象的使用和 Error
几乎一致。
浏览器碰到对应的异常,也会抛出。
try {
console.log(notDefinedVariable);
} catch (e) {
console.error(e);
}
因为 notDefinedVariable
并没有定义,所以浏览器会抛出 ReferenceError
异常,同时提示变量没有定义。