Error 是一种对象,用来表示程序执行时发生的问题。
| 错误类型 | 说明 |
|---|
| ReferenceError | 引用了不存在的变量(如 console.log(x) 而 x 未定义) |
| TypeError | 调用了不正确的类型方法(如 null.toUpperCase()) |
| SyntaxError | 语法错误(如漏掉括号、拼写错误) |
| RangeError | 超出允许范围(如递归过深、数组长度为负) |
| Network Error | 网络请求失败(例如 fetch() 失败) |
| Promise Rejection | Promise 被拒绝且未捕获 .catch() |
| Security Error | 浏览器安全限制相关错误(如跨域访问) |
| 语法块 | 作用 | 说明 |
|---|
try { ... } | 放入可能出错的代码 | 如果没有出错,则跳过 catch |
catch(error) { ... } | 捕获并处理错误 | 防止程序崩溃,可打印或修复错误 |
finally { ... } | (可选)总会执行 | 常用于资源清理、关闭文件或断开连接 |
try {
console.log(x); // x 未定义 → 会触发错误
}
catch(error) {
console.log("⚠️ Error caught!");
console.log(error.name); // 错误类型 (ReferenceError)
console.log(error.message); // 错误信息
}
finally {
//close files
//close connections
//release resources
console.log("✅ Finally block always runs.");
}
console.log("Program continues..."); // 程序不会崩溃
Another Example
try {
// ======================== 用户输入 ========================
// 通过 window.prompt() 获取用户输入的两个值
// dividend(被除数)和 divisor(除数)
// 使用 Number() 把字符串转换为数字
const dividend = Number(window.prompt("Enter a dividend"));
const divisor = Number(window.prompt("Enter a divisor"));
// ======================== 输入验证与错误检测 ========================
// 检查除数是否为 0
// 如果为 0,就手动抛出一个错误
if (divisor == 0) {
// 使用 throw 抛出一个 Error 对象
// 抛出后 try 块中的代码将立即停止执行,跳转到 catch 块
throw new Error("You can’t divide by zero");
}
// 检查输入是否为非数字(NaN)
// 如果任意一个输入不是数字,则抛出错误
if (isNaN(dividend) || isNaN(divisor)) {
throw new Error("Values must be numbers");
}
// ======================== 正常运算逻辑 ========================
// 如果通过了所有验证,计算结果
const result = dividend / divisor;
// 输出除法结果
console.log(result);
}
catch (error) {
// ======================== 错误捕获与处理 ========================
// 当上面的 try 块中抛出错误时,这里会被执行
// error 参数接收到抛出的 Error 对象
console.error(error); // 打印完整错误信息(含 name + message)
}
// ======================== 程序结束 ========================
// 即使 try 中出错,程序依然可以继续往下执行
console.log("You have reached the end");