1、异常处理

try-catch-finally

try 语句允许我们定义在执行时进行错误测试的代码块。

catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。

JavaScript 语句 trycatch 是成对出现的。

try {
    ...    //异常的抛出
} catch(e) {
    ...    //异常的捕获与处理
} finally {
    ...    //结束处理
}

throw

throw 可以创建并抛出异常。

异常可以是 JavaScript 字符串、数字、逻辑值或对象。

function myFunction() {
    var message, x;
    message = document.getElementById("message");
    message.innerHTML = "";
    x = document.getElementById("demo").value;
    try { 
        if(x == "")  throw "值为空";
        if(isNaN(x)) throw "不是数字";
        x = Number(x);
        if(x < 5)    throw "太小";
        if(x > 10)   throw "太大";
    }
    catch(err) {
        message.innerHTML = "错误: " + err;
    }
}

自定义异常

虽然我们可以 throw 各种对象作为异常,但是还是推荐抛出自定义异常类,这样信息更全。

在 Node.js 中,自定义异常是一种常见的做法,它可以帮助你更好地控制错误处理和提供更具体的错误信息。自定义异常可以通过继承 JavaScript 的内置 Error 对象来实现。这样做的好处是你可以添加额外的属性或方法,以便在捕获异常时提供更多上下文信息。

  1. 继承 Error:创建一个新的类,并让它继承自 Error 类。
  2. 添加构造函数:在构造函数中调用 super() 来调用父类的构造函数,并传递一个描述性的错误消息。
  3. 添加额外的属性:你可以添加任何需要的属性来存储额外的信息,比如错误代码、状态码等。
class UserNotFoundException extends Error {
  constructor(message = "用户未找到") {
    super(message); // 调用父类的构造函数
    this.name = "UserNotFoundException"; // 错误名称
    this.statusCode = 404; // HTTP 状态码
    // 确保错误堆栈是正确的,一般不需要写
    Error.captureStackTrace(this, this.constructor);
  }
}
 
// 使用示例
try {
  throw new UserNotFoundException("指定的用户ID不存在");
} catch (error) {
  if (error instanceof UserNotFoundException) {
    console.error(`错误名称: ${error.name}, 状态码: ${error.statusCode}, 消息: ${error.message}`);
  } else {
    console.error("未知错误:", error);
  }
}