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是必选项,而catchtry可以二选一(当然全选也可以),不过要记住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出问题,程序异常错误但是没人知道怎么回事```
posted @ 2026-01-22 15:45  qiqimk  阅读(2)  评论(0)    收藏  举报