JavaScript碎冰冰-错误处理
注意:本篇学习笔记基于原网站: JavaScript教程 - 廖雪峰的官方网站
笔记仅作学习留档使用
本篇目录
错误处理逻辑
错误类型
异步错误处理
错误处理逻辑
使用try … catch … finally处理错误
let r1, r2, s = null;
try {
r1 = s.length; // 此处应产生错误
r2 = 100; // 该语句不会执行
} catch (e) {
console.log('出错了:' + e);
} finally {
console.log('finally');
}
console.log('r1 = ' + r1); // r1应为undefined
console.log('r2 = ' + r2); // r2应为undefined
try包裹可能会出错的代码,一旦出错就跳转到catch 块不执行后续,不出错则略过。catch内部用于报错的代码结合变量 e输出捕获到的错误。所有代码解释后执行finally
try语句中,finally是必选项,而catch和try可以二选一(当然全选也可以),不过要记住catch (e) {}内要有出错语句,如果为空照样不会报错。
错误类型
程序也可以主动使用 throw 语句抛出一个错误,让执行流程直接跳转到 catch 块。
let r, n, s;
try {
// 用户输入一个数字(字符串形式)
s = prompt('请输入一个数字');
n = parseInt(s); // 转换为整数
if (isNaN(n)) { // 输入不合法报错
throw new Error('输入错误');
}
// 计算平方:
r = n * n;
console.log(n + ' * ' + n + ' = ' + r);
} catch (e) {
console.log('出错了:' + e);
}
异步错误处理
用try包裹异步函数是无效的,涉及到异步代码,无法在调用时捕获,原因就是在捕获的当时,回调函数并未执行。
function printTime() {
throw new Error();
}
try {
// 执行,printTime被暂停
setTimeout(printTime, 1000);
// 下一步
console.log('done');
} catch (e) { // 没出错跳过
console.log('error');
}
...
// 所有结束,把没用的缓存扔掉,程序继续往下走
// 时间到了,该执行printTime了!
// printTime出问题,程序异常错误但是没人知道怎么回事```
浙公网安备 33010602011771号