美文网首页
错误处理

错误处理

作者: SingleDiego | 来源:发表于2019-01-14 15:45 被阅读10次
    try ... catch ... finally

    JavaScript 使用 try ... catch ... finally 语句来处理错误。

    例子如下:

    var 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
    
    // 运行结果
    出错了:TypeError: Cannot read property 'length' of null
    finally
    r1 = undefined
    r2 = undefined
    

    我们来分析一下使用 try ... catch ... finally 的执行流程。

    当代码块被 try { ... } 包裹的时候,就表示这部分代码执行过程中可能会发生错误,一旦发生错误,就不再继续执行后续代码,转而跳到 catch 块。

    catch (e) { ... } 包裹的代码就是错误处理代码,变量 e 表示捕获到的错误。最后,无论有没有错误,finally 一定会被执行。

    所以,有错误发生时,执行流程像这样:

      1. 先执行 try { ... } 的代码;
      1. 执行到出错的语句时,后续语句不再继续执行,转而执行 catch (e) { ... } 代码;
      1. 最后执行 finally { ... } 代码。

    而没有错误发生时,执行流程像这样:

      1. 先执行 try { ... } 的代码;
      1. 因为没有出错,catch (e) { ... } 代码不会被执行;
      1. 最后执行 finally { ... } 代码。

    最后请注意,catchfinally 可以不必都出现。




    错误类型

    JavaScript 有一个标准的 Error 对象表示错误,还有从 Error 派生的TypeErrorReferenceError 等错误对象。

    我们在处理错误时,可以通过 catch(e) 捕获的变量 e 并访问错误对象。

    var r1, r2, s = null;
    try {
        r1 = s.length; // 此处应产生错误
        r2 = 100; // 该语句不会执行
    } catch (e) {
        if (e instanceof TypeError) {
            console.log('e is Type Error');
        } else if (e instanceof Error) {
            console.log(e.message);
        } else {
            console.log('Error: ' + e);
        }
    } finally {
        console.log('finally');
    }
    

    使用变量 e 是一个习惯用法,也可以以其他变量名命名,如 catch(ex)




    抛出错误

    程序也可以主动抛出一个错误,让执行流程直接跳转到 catch 块。抛出错误使用 throw 语句。

    例如,下面的代码让用户通过 prompt 方法输入一个数字,程序接收到的实际上是一个字符串,然后用 parseInt() 转换为整数。当用户输入不合法的时候 parseInt() 的结果是 NaN,我们就抛出错误:

    var 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);
    }
    

    相关文章

      网友评论

          本文标题:错误处理

          本文链接:https://www.haomeiwen.com/subject/fbzddqtx.html