在 JavaScript 中,错误处理是编写健壮和可靠代码的重要组成部分。错误可以分为两类:语法错误和运行时错误。错误处理的主要工具是 try...catch
语句和 throw
语句。
1. 语法错误
语法错误是在代码解析阶段发生的错误,通常是由于代码结构或语法规则的问题。这类错误会导致代码无法执行。
// 语法错误示例
if (x > 10 {
console.log("x is greater than 10");
}
// Uncaught SyntaxError: Unexpected token '{'
2. 运行时错误
运行时错误是在代码执行阶段发生的错误,通常是由于无效的操作或不可预测的情况。使用 try...catch
可以捕获这些错误。
// 运行时错误示例
try {
let result = x / y; // y 可能为 0
console.log(result);
} catch (error) {
console.error("Error:", error.message);
}
// Error: Division by zero
3. try…catch 语句
try...catch
语句用于处理运行时错误。代码块放在 try
中执行,如果有错误,则控制流会跳转到 catch
语句块。
try {
// 有可能发生错误的代码
} catch (error) {
// 处理错误的代码
}
4. throw 语句
throw
语句用于手动抛出一个异常。它通常与 try...catch
结合使用。
function divide(x, y) {
if (y === 0) {
throw new Error("Division by zero is not allowed.");
}
return x / y;
}
try {
let result = divide(10, 0);
console.log(result);
} catch (error) {
console.error("Error:", error.message);
}
// Error: Division by zero is not allowed.
5. 错误对象
catch
语句中的 error
对象包含了关于错误的信息,如错误消息 (message
)、错误名称 (name
) 等。
try {
// 有可能发生错误的代码
} catch (error) {
console.error("Error Name:", error.name);
console.error("Error Message:", error.message);
}
6. finally 语句
finally
语句在 try
或 catch
之后无论是否发生错误都会执行。它通常用于进行清理工作。
try {
// 有可能发生错误的代码
} catch (error) {
console.error("Error:", error.message);
} finally {
// 无论是否发生错误都会执行的代码
}
7. 自定义错误
除了使用内置的 Error
对象,还可以创建自定义错误类来提高代码可读性和可维护性。
class CustomError extends Error {
constructor(message) {
super(message);
this.name = "CustomError";
}
}
try {
throw new CustomError("This is a custom error.");
} catch (error) {
console.error("Error Name:", error.name);
console.error("Error Message:", error.message);
}
// Error Name: CustomError
// Error Message: This is a custom error.
8. 异步错误处理
对于异步操作,可以使用 try...catch
无法捕获的 Promise
对象的 catch
方法或 async/await
来处理错误。
async function fetchData() {
try {
let response = await fetch("https://example.com/api/data");
let data = await response.json();
console.log(data);
} catch (error) {
console.error("Fetch Error:", error.message);
}
}