错误与异常 之 try...catch语句

简介: 错误与异常 之 try...catch语句

错误与异常

概念

错误,指程序中的非正常运行状态,在其它编程语言中称为“异常”或“错误”。解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息。


通过使用JavaScript提供的异常处理语句,可以用结构化的方式来捕捉发生的错误,让异常处理代码与核心业务代码实现分离。


错误与异常处理在应用中的重要性是毋庸置疑的。任何有影响力的Web应用都需要一套完善的错误处理机制。

try…catch语句

tr …catch 语句作为JavaScript中处理异常的一种标准方式。try语句标记一块待尝试的语句,如果该语句出现错误,则通过catch语句进行捕获。基本语法如下所示:

try {
    //可能会导致错误的代码
}catch(error){
    //在错误发生时的处理
}

捕捉块

可以使用捕捉块来处理所有可能在try代码块中产生的异常。

catch(catchID){
    statements
}

捕捉块指定了一个标识符(上述语句中的catchID)用来存放抛出语句指定的值。

可以用这个标识符来获取抛出的异常信息。

终结块

终结块包含了在try和catch块完成后、下面接着的语句之前执行的语句。**终结块无论是否抛出异常都会执行。**如果抛出了异常,就算没有异常处理,终结块里的语句也会执行。


如下示例代码展示了try…catch的语法:

// v = 100
// 用于捕获指定语句块中的错误或异常
try{
    console.log(v);//调用未定义的变量 -> 报错
}
// 用于处理try语句中出现的错误
catch (e) {
    // e -- 表示try语句中出现错误的信息 ,e不是固定的,用法等同于变量
    console.log(e);
}
// 终结块 - catch语句无法处理try语句中的错误或异常时,执行finally 语句中的内容
finally {
    console.log('此句没错');
}

throw语句

与try…catch语句相配合使用的还有throw操作符,用于随时抛出自定义错误。抛出错误时,必须要给throw操作符指定一个值(这个值是什么类型,没有要求)。


throw语句用来抛出一个用户自定义的异常。当前函数的执行将被停止(throw之后的语句将不会执行),并且控制将被传递到调用堆栈中的第一个catch块。如果调用者函数中没有catch块,程序将会终止。

function fn(v){
    // 确保形参必须存在
    if (v){
        return v;
    }else{
         /*
         throw 语句 - 人为抛出错误或异常
        * 语法结构 -throw 异常或错误的表达式
            * 表达式允许是任意类型的内容
        * 作用 - 预判断当前使用的变量、函数或对象是否存在。
        */
        throw {name :  '猪猪侠'}
    }
}
/*console.log(fn(10))//10
console.log(fn());//报错*/
var result;
try{
    result = fn();
}catch(e){
    result = 'unknown';//unknown
    // 因为e是一个对象,所以可以调用e.name 属性
    console.log(e.name)
}
console.log(result);

嵌套try…catch语句

可以嵌套一个或多个try…catch语句。如果一个内部的try…catch语句没有捕捉块,将会启动匹配外部的try…catch语句的捕捉块。

// 嵌套try...catch 语句
try{
    console.log(v);//调用未定义的变量 -> 报错
}catch (e) {
    try{
        console.log('第一次报错');
    }catch (e) {
        console.log('第二次报错');
    }
}
目录
相关文章
|
7月前
|
C++
C++ 捕获所有异常并拿到错误原因的方法
C++ 捕获所有异常并拿到错误原因的方法
202 0
|
28天前
|
前端开发 JavaScript
使用 try-catch 语句来捕获 Promise 中的异常
【10月更文挑战第26天】使用try-catch语句捕获Promise中的异常是一种非常实用的技术,能够使异步代码的错误处理更加清晰、可控,提高程序的可靠性和稳定性。在实际开发中,合理地运用try-catch语句以及其他相关的错误处理机制,可以有效地应对各种可能出现的异常情况,为用户提供更好的体验。
|
2月前
|
Java
ry-catch 块的捕获范围
【10月更文挑战第15天】try-catch 块的捕获范围具有一定的局限性和特点,需要在实际编程中根据具体情况灵活运用。了解其捕获范围有助于更准确地处理异常,提高程序的稳定性和可靠性。
101 46
|
2月前
哪些情况可能会导致 try-catch 语句不捕获异常?
【10月更文挑战第12天】在实际应用中,可能还会存在其他一些情况导致异常不被捕获。因此,在使用`try-catch`语句时,需要仔细考虑各种可能的情况,以确保异常能够被正确地捕获和处理。
285 1
|
4月前
|
网络协议 Java 数据库连接
13 Java异常(异常过程解析、throw、throws、try-catch关键字)
13 Java异常(异常过程解析、throw、throws、try-catch关键字)
93 2
|
Java 程序员 API
异常(上)概述,捕捉异常,try-catch语句的详细使用
异常(上)概述,捕捉异常,try-catch语句的详细使用
222 0
|
Java 程序员 API
异常(中)创建自定义异常,throw,throws关键字抛出异常
异常(中)创建自定义异常,throw,throws关键字抛出异常
114 0
|
JSON 安全 前端开发
替代try catch处理异常的优雅方式
替代try catch处理异常的优雅方式
try-catch-finally结构的finally语句 一定会执行吗? fianlly语句遇到System.exit(0);一定不执行吗?
try-catch-finally结构的finally语句 一定会执行吗? fianlly语句遇到System.exit(0);一定不执行吗?
176 0
try-catch-finally结构的finally语句 一定会执行吗? fianlly语句遇到System.exit(0);一定不执行吗?