抛出异常
在 JavaScript 中,throw 语句用于抛出一个用户定义的异常。执行 throw 语句会抛出一个异常,并停止当前代码的执行。可以使用 throw 语句抛出任何类型的值,包括自定义对象。
基本用法
抛出异常的基本语法如下:
throw "错误消息";
或者抛出一个对象:
throw { name: "ErrorName", message: "错误消息" };检查异常
在 JavaScript 中,通常使用 try...catch 结构来捕获和处理异常。try 块包含可能会抛出异常的代码,而 catch 块则用来处理这些异常。
// www.javascriptcn.com code example
try {
// 可能会抛出异常的代码
if (condition) {
throw "错误消息";
}
} catch (err) {
// 处理异常
console.log("捕获到错误:" + err);
}自定义异常对象
为了更详细地描述错误,可以抛出自定义的对象,其中包含错误名称、错误消息等信息。例如:
// www.javascriptcn.com code example
function checkAge(age) {
if (age < 18) {
throw {
name: "UnderAgeError",
message: "年龄不足"
};
}
}
try {
checkAge(15);
} catch (err) {
console.log(`${err.name}: ${err.message}`);
}在这个例子中,checkAge 函数检查用户的年龄是否小于18岁。如果年龄不足,函数将抛出一个包含错误名称和消息的对象。catch 块接收到这个对象并打印出错误信息。
使用内置异常类型
JavaScript 提供了一些内置的异常类型,如 Error 和其子类。使用这些类型可以创建更具描述性的错误信息。
// www.javascriptcn.com code example
function checkAge(age) {
if (age < 18) {
throw new Error("年龄不足");
}
}
try {
checkAge(15);
} catch (err) {
console.log(`捕获到错误:${err.message}`);
}在这个例子中,Error 构造函数被用来创建一个新的异常对象,其中包含了一个简单的错误消息。catch 块接收到这个异常对象并打印出错误消息。
异常链
有时候,异常可能在嵌套的 try...catch 块中被抛出和捕获。为了跟踪异常的来源,可以在捕获的异常对象中添加额外的信息,例如原始异常对象:
// www.javascriptcn.com code example
function checkAge(age) {
if (age < 18) {
throw new Error("年龄不足");
}
}
function main() {
try {
checkAge(15);
} catch (err) {
throw new Error("在 main 函数中捕获到错误", { cause: err });
}
}
try {
main();
} catch (err) {
console.log(`捕获到错误:${err.message}`);
console.log(`原始错误信息:${err.cause.message}`);
}在这个例子中,main 函数包裹了对 checkAge 的调用,并在捕获到异常时抛出一个新的异常对象。新的异常对象包含了原始异常的信息,从而使得调试变得更加容易。
总结
通过 throw 语句,JavaScript 程序员可以抛出异常,并且使用 try...catch 结构来处理这些异常。通过抛出和捕获自定义的异常对象,可以提供更详细的错误信息,从而使程序更加健壮和易于维护。此外,通过使用内置的异常类型和异常链机制,可以更好地追踪和处理程序中的错误。