JavaScript基础知识介绍——异常和错误处理(Error对象、抛出异常、调用栈、try...catch...finally)

异常处理:一种以可控的方式处理错误的机制,其本意是处理异常情况(预期之外的错误)

1. Error对象:

JavaScript有一个内建的Error对象,它可以用来处理任意类型的错误(异常或预期错误)。还可以在创建Error实例的时候

提供一些错误信息:

const err = new Error("invalid email");

创建出的Error实例本身不会做任何事,它值提供一个传递错误的载体。

2. 使用try和catch处理异常:

使用try...catch语句可以完成异常处理

注意,一旦有错误产生,执行逻辑会立即跳转到catch块中

如果try块中的语句没有任何错误,catch块中的代码就不会被执行,程序会继续运行下去

3. 抛出异常:

用try...catch语句捕获JavaScript自身产生的错误,也可以自己“抛出”错误,此时异常处理机制就会被启动

例如:如果需要给一个银行应用开发付款功能,可能会在账户余额不足的时候跑出一个异常:

function billPay(amount,payee,account){
    if(amount > amount.balance)
          throw new Error("insufficient funds"); 
    account.transfer(payee,amount);
}
//调用throw时,当前函数会立即停止执行(所以本例中,account.transfer将不会被调用)

4. 异常处理和调用栈:

错误会沿着调用栈传递,直到被捕获

错误可以在调用栈中的任一级别被捕获,如果它们没有被捕获,JavaScript解释器就会强行终止程序,这种错误被称为未被处理的异常或者未被捕获的异常,它会使程序崩溃

当错误被捕获后,调用栈会提供一些用来诊断错误的有用信息

在大多数JavaScript实现中,Error实例包含了一个stack属性,它是调用栈的字符串形式(它不是标准的JavaScript特性,不过却可以用在大多数环境中)

5. try...catch....finally:

很多时候,try块中包含一些对资源的引用,不管有没有发生错误,都需要释放这些资源,防止应用程序永远占用着资源,由于try块中可与包含很多语句,任何一条都有可能发生错误,所以在try块里释放资源并不安全(因为错误可能发生在释放资源之前,这样就没有机会释放资源了)。同样在catch中释放资源也不安全,因为catch中的代码只有在发生错误的时候才会执行。这时finally就派上用场了,不管是否发生错误,finally中的代码都会被执行

try{
    console.log("this line is executed....");
    throw new Error("whoops");
    console.log("this line is not...");
}catch(err){
    console.log("there was an error...");
}finally {
     console.log("...always executed");
     console.log("perform cleanup here");
}

 

你可能感兴趣的:(JavaScript,异常和错误处理,Error对象,调用栈,抛出异常)