Skip to content

错误

了解错误是什么、语法错误与运行时错误的区别,以及如何优雅地处理它们。

你将学到

  • 错误是什么、程序为什么会产生错误
  • 语法错误、运行时错误、逻辑错误的区别
  • try/catch 如何优雅处理错误
  • 如何读懂错误信息和调用栈

概念讲解

错误

错误是程序运行出问题的信号。错误不代表你这个程序员失败——它是常态,学会读懂和处理错误是一项核心技能。

三种错误

  1. 语法错误 —— 代码格式不对,根本无法解析。少个括号、多个逗号。程序压根不会运行。
  2. 运行时错误 —— 语法没问题,但执行时失败。调用不存在的函数、读取 null 的属性。
  3. 逻辑错误 —— 程序不崩溃,但结果不对。最难找,因为没有错误信息。

读懂错误信息

运行时错误会打印信息调用栈——导致错误的函数调用链。从栈顶往下读:第一行通常指出错误发生的文件和行号。

TypeError: Cannot read properties of undefined (reading 'name')
    at getUser (app.js:12)
    at render (app.js:25)

意思是:app.js 第 12 行 getUser 内部,代码试图从 undefined 上读 .name

try / catch

你可以捕获运行时错误并优雅处理,而不是让程序崩溃:

try {
  const data = JSON.parse(brokenInput);
} catch (error) {
  console.log("Invalid JSON:", error.message);
}

try 里正常跑;一旦抛错,执行跳到 catch 并带上错误对象。程序继续,不崩溃。

心态

错误是反馈,不是惩罚。每条错误信息都是线索。看到错误,仔细读——它通常直接告诉你哪里出了什么问题。

示例代码

              // 一个可能失败的函数:
function parseAge(input) {
  const age = Number(input);
  if (Number.isNaN(age)) {
    throw new Error(`${input} is not a valid number`);
  }
  if (age < 0) {
    throw new Error("Age cannot be negative");
  }
  return age;
}

// 用 try/catch 优雅处理:
try {
  const result = parseAge("twenty");
  console.log("Age:", result);
} catch (error) {
  console.log("Could not parse age:", error.message);
  // "Could not parse age: twenty is not a valid number"
}
            

parseAge 对非法输入抛出自定义错误。调用处的 try/catch 阻止崩溃,改为显示友好提示。

动手试一试

  • JSON Validator

    粘贴残缺 JSON 并阅读错误信息。这个工具能捕获语法错误并精确指出位置。

常见错误

错误写法

无视错误信息而不是去读它。

正确做法

读信息和调用栈。它们通常点明文件、行号和问题。花 30 秒读,能省 30 分钟瞎猜。

错误写法

用空的 catch 块悄悄吞掉错误。

正确做法

catch 块至少要记日志。静默吞错会埋下隐患,让后续调试难上加难。

相关工具

查阅不认识的术语

新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。

查看术语表

动手做项目

通过引导式项目应用所学,含起始代码与解决方案。

查看项目

解读错误信息

用大白话解释常见错误——什么意思、为什么发生、如何修复。

查看错误