throw后可接任意值,但推荐抛出Error实例;可自定义继承Error的错误类以增强语义和调试能力;throw触发异常机制,未捕获时中断执行,配合try...catch实现可控流程控制。

JavaScript 中 throw 语句用于手动抛出异常,一旦执行,当前函数立即停止执行,控制权交由最近的 try...catch 捕获;若无捕获,则中断整个调用栈,导致脚本终止(除非被全局错误处理捕获)。
throw 后可以跟什么值?
throw 后可接任意类型的值:字符串、数字、布尔、对象,甚至函数或 undefined。但推荐抛出 Error 实例,因为浏览器和调试工具对 Error 对象有专门支持(如堆栈追踪、name 和 message 属性)。
-
throw "用户名不能为空";—— 简单但不推荐,缺少堆栈信息 -
throw 400;—— 语法合法,但无法体现错误语义 -
throw new Error("用户名不能为空");—— ✅ 推荐,含 stack、message、name -
throw new TypeError("参数必须是字符串");—— ✅ 更精确的内置错误类型
如何创建并抛出自定义错误类?
继承 Error 可封装特定业务逻辑,便于识别和统一处理:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
class ValidationError extends Error {
constructor(message, field) {
super(message);
this.name = "ValidationError";
this.field = field;
}
}
// 使用
throw new ValidationError("密码长度不足8位", "password");
这样在 catch 中可通过 err instanceof ValidationError 精准判断,并访问自定义属性(如 err.field)。
throw 怎么中断流程?结合 try/catch 的典型用法
throw 本身不“中断”——它触发异常机制,真正中断执行的是未被捕获的异常。配合 try...catch 才能实现可控中断与恢复:
throw
- 不要只 throw 字符串:丢失堆栈、难以区分错误类型、不利于调试
- throw 不等于 return:它不返回值,也不属于函数正常退出路径
-
异步中不能直接 throw 中断外部流程:Promise 内 throw 需用
.catch()或await + try/catch捕获 -
未捕获的 throw 会终止脚本:生产环境建议设置
window.onerror或process.on('uncaughtException')(Node.js)兜底
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










