Skip to content

错误与异常

JavaScript 中的错误和异常处理是确保程序稳定性和用户体验的重要方面。以下是一些关于 JavaScript 错误和异常处理的关键知识点:

  1. 错误类型:

    • SyntaxError:代码中的语法错误。
    • ReferenceError:引用了一个不存在的变量。
    • TypeError:在错误的数据类型上执行了操作。
    • RangeError:数值变量或参数超出其有效范围。
    • EvalError:与 eval() 函数有关的错误(在最新的 JavaScript 版本中不常见)。
    • URIError:全局 URI 处理函数被误用时抛出。
    • Error:其他错误的通用类型。
  2. throw 语句: 使用 throw 语句可以抛出自定义错误。你可以抛出数字、字符串、布尔值或对象。

    javascript
    throw "Error2"; // 抛出一个字符串错误
    throw 42; // 抛出一个数字错误
    throw true; // 抛出一个布尔错误
    throw new Error("Something went wrong"); // 抛出一个错误对象
  3. try...catch 语句: try 代码块包含可能会抛出错误的代码。catch 代码块会捕获到 try 代码块中抛出的任何错误。

    javascript
    try {
      // 尝试执行的代码
      nonExistentFunction();
    } catch (error) {
      // 处理错误的代码
      console.error(error.message);
    }
  4. finally 语句: finally 代码块将在 trycatch 代码块之后执行,无论是否有异常抛出。这通常用于清理代码,比如关闭文件流或数据库连接。

    javascript
    try {
      // 尝试执行的代码
    } catch (error) {
      // 处理错误的代码
    } finally {
      // 最终执行的代码
    }
  5. 错误对象属性:

    • message:提供关于错误的描述性消息。
    • name:错误的名称(例如 "ReferenceError")。
    • stack:一个代表代码执行堆栈的字符串,这有助于调试。
  6. 自定义错误: 你可以通过扩展 Error 类来创建自定义错误类型。

    javascript
    class CustomError extends Error {
      constructor(message) {
        super(message);
        this.name = "CustomError";
      }
    }
  7. 错误事件: 在浏览器中,未捕获的异常将触发 window 对象上的 error 事件。你可以监听这个事件来全局处理未捕获的错误。

    javascript
    window.addEventListener("error", function (event) {
      // 全局错误处理
      console.log(event.message);
    });
  8. Promises 和 async/await 的错误处理: 对于基于 Promise 的异步代码,你应该使用 .catch() 方法或者在 async/await 函数中使用 try...catch 结构来处理错误。

    javascript
    // 使用 .catch()
    doSomethingAsync()
      .then((result) => {
        // 处理结果
      })
      .catch((error) => {
        // 处理错误
      });
    
    // 使用 async/await
    async function asyncFunction() {
      try {
        let result = await doSomethingAsync();
        // 处理结果
      } catch (error) {
        // 处理错误
      }
    }

理解和能够有效地处理错误和异常是成为一名熟练的 JavaScript 开发者的重要组成部分。这不仅可以帮助你编写更加健壮的代码,还可以提高用户体验和系统的可靠性。

hancenter808@outlook.com