Error 是一种对象,用来表示程序执行时发生的问题。

错误类型说明
ReferenceError引用了不存在的变量(如 console.log(x) 而 x 未定义)
TypeError调用了不正确的类型方法(如 null.toUpperCase())
SyntaxError语法错误(如漏掉括号、拼写错误)
RangeError超出允许范围(如递归过深、数组长度为负)
Network Error网络请求失败(例如 fetch() 失败)
Promise RejectionPromise 被拒绝且未捕获 .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");