try 语句允许我们定义在执行时进行错误测试的代码块。
catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
JavaScript 语句 try 和 catch 是成对出现的。
try {
... //异常的抛出
} catch(e) {
... //异常的捕获与处理
} finally {
... //结束处理
}
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
对象来实现。这样做的好处是你可以添加额外的属性或方法,以便在捕获异常时提供更多上下文信息。
Error
类:创建一个新的类,并让它继承自 Error
类。super()
来调用父类的构造函数,并传递一个描述性的错误消息。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);
}
}