try...catch 是 JavaScript 处理运行时错误的核心机制,通过 try 执行可能出错代码、catch 捕获异常对象(含 message/name/stack)、finally 保证清理操作执行;需区分错误类型、避免空 catch、慎用一锅端,并结合 async/await 和 Promise.allSettled() 正确处理异步错误。
JavaScript 中的 try...catch 是处理运行时错误的核心机制,它能防止未捕获异常导致脚本中断,让程序更健壮。
try 块中放可能出错的代码;一旦抛出异常,JS 立即跳转到 catch 块执行,try 中后续语句不再运行。如果没有异常,catch 块被跳过。
try,catch 或 finally 至少存在一个catch 参数(如 err)接收 Error 对象,包含 message、name、stack 等属性finally 无论是否出错都会执行,常用于清理操作(如关闭定时器、重置状态)原生错误类型包括 ReferenceError、TypeError、SyntaxError(仅在 eval 中可捕获)、RangeError 等。可通过 err instanceof TypeError 或 err.name === 'TypeError' 进行区分处理。
TypeError)还是后端返回了错误状态(需检查响应体)Error 类,便于统一识别和日志分类setTimeout、fetch 回调)中的错误无法被外层 try...catch 捕获,需在异步内部单独处理或使用 async/await + try...catch
不要把整个函数体包进一个 try 块里“一锅端”,这会掩盖具体出错位置,也不利于定位问题。
JSON.parse()、访问深层嵌套对象属性、调用第三方 SDK 方法catch:至少记录 console.error(err) 或上报错误,否则异常会被静默吞掉catch 中不要盲目
throw err,除非你要向上冒泡;必要时可包装错误信息再抛出:throw new Error(`解析用户数据失败:${err.message}`)
这是现代 JS 错误处理最常用的方式。只要 await 后的 Promise 被 reject,就会被 catch 捕获,写法和同步错误几乎一致。
fetch 成功响应不代表业务成功,需手动检查 response.ok 并调用 response.json(),后者也可能抛错Promise.allSettled() 替代 Promise.all()