JavaScript错误处理核心是用try-catch捕获同步异常,防止崩溃并提供反馈;try中出错立即跳catch,error含message/name/stack;finally必执行;异步错误需内部单独处理;throw推荐new Error;避免空catch或过度包裹。
JavaScript 的错误处理,核心是捕获运行时异常、防止程序崩溃,并提供友好的反馈或降级逻辑。try-catch 是最常用、最直接的同步错误处理机制。
try-catch 基本结构
用 try 包裹可能出错的代码,用 catch 捕获并处理抛出的错误,可选地用 finally 执行无论成功失败都要运行的清理操作。
- try 块中一旦遇到 throw 或运行时错误(如访问 undefined 属性、调用非函数值),立即中断执行,跳转到 catch
-
catch 参数(通常叫
error)是一个 Error 对象,包含message、name、stack等属性 - finally 不管有没有错误都会执行,适合关流、重置状态、释放资源
实际使用示例
比如解析用户输入的 JSON:
try {
const data = JSON.parse(userInput);
console.log('解析成功:', data);
} catch (err) {
console.error('JSON 解析失败:', err.message);
// 可以给用户提示,或提供默认数据
const data = { id: 0, name: '未知' };
} finally {
console.log('解析流程结束');
}
注意:catch 只捕获同步错误。异步操作(如 setTimeout、Promise 回调、fetch)中的错误不会被外层 try-catch 捕获,需在异步内部单独处理。
配合 throw 主动抛错
你可以在业务逻辑中用 throw 手动抛出错误,让 catch 统一处理:
- throw 后可以跟字符串、Error 实例,推荐用
new Error('xxx'),便于后续识别和堆栈追踪 - 例如校验参数时:
if (!id) throw new Error('ID 必须提供'); - 这样上层调用方就能用
try-catch 接住,而不是让错误一路冒泡到全局
别忽略错误,也别过度 try-catch
错误处理不是越多越好:
- 避免空的 catch 块(
catch {}),这会让错误静默消失,极难调试 - 不要把整个函数体包进一个大 try-catch,应聚焦在真正可能失败的语句附近
- 对于 Promise,优先用
.catch()或await ... catch,而不是包裹 async 函数体 - 未被捕获的错误会触发
window.onerror或process.on('uncaughtException')(Node.js),可作为兜底日志收集
基本上就这些。try-catch 不复杂,但容易忽略细节——关键是明确哪里可能错、想怎么响应、以及别让错误悄无声息地溜走。

try-catch 接住,而不是让错误一路冒泡到全局






