登录
首页 >  文章 >  前端

JavaScript错误类型与处理方法

时间:2026-01-28 20:00:52 197浏览 收藏

大家好,我们又见面了啊~本文《JavaScript错误处理及常见错误类型》的内容中将会涉及到等等。如果你正在学习文章相关知识,欢迎关注我,以后会给大家带来更多文章相关文章,希望我们能一起进步!下面就开始本文的正式内容~

JavaScript错误类型主要有SyntaxError、ReferenceError、TypeError、RangeError、URIError和EvalError(已废弃);其中ReferenceError和TypeError最常见,SyntaxError无法用try...catch捕获。

javascript怎样处理错误_它有哪些错误类型?

JavaScript 错误类型有哪些?

JavaScript 运行时错误主要分三类:EvalError(已废弃,基本不用)、SyntaxError(解析阶段报错,如少括号、非法字符)、ReferenceError(访问未声明变量)、TypeError(操作不兼容类型,如调用 undefined 当函数)、RangeError(数值超出有效范围,如递归太深、数组长度负数)、URIErrorencodeURI 等 URI 处理函数参数非法)。

其中真正高频的是 ReferenceErrorTypeErrorSyntaxError 只在代码加载/解析时抛出,无法用 try...catch 捕获(因为执行根本没开始)。

怎样用 try...catch 捕获运行时错误?

try...catch 只能捕获同步执行中抛出的错误,对异步代码(如 setTimeoutPromise 回调)默认无效。

  • 必须把可能出错的语句写在 try 块内,否则不会触发捕获
  • catch 参数是错误对象,通常命名为 erre,它有 name(错误类型名)、message(提示文本)、stack(调用栈)属性
  • 不要只打印 err,直接 console.log(err) 会输出空对象;应取 err.messageerr.stack
try {
  JSON.parse('{ "name": "Alice"'); // 少了 }
} catch (err) {
  console.error('解析失败:', err.message); // SyntaxError: Unexpected end of JSON input
}

Promise 和 async/await 怎么处理错误?

Promise 的错误不能靠外层 try...catch 捕获,除非你显式地 await 它;而 async/await 写法下,try...catch 才真正“像同步一样”生效。

  • Promise.catch() 是链式处理错误的标准方式,比 then(null, handler) 更清晰
  • async/await 中,只要 await 后的 Promise 被 reject,就会被 catch 捕获,等价于 Promise.catch()
  • 注意:多个 await 连续写时,一个出错会中断后续执行——这是预期行为,不是 bug
async function fetchUser() {
  try {
    const res = await fetch('/api/user');
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    return await res.json();
  } catch (err) {
    console.error('获取用户失败:', err.message);
    return null;
  }
}

全局错误和未捕获异常怎么兜底?

总有漏网之鱼:未加 try...catch 的异步回调、第三方脚本抛错、addEventListener 里的异常……这时候靠两个全局钩子:

  • window.addEventListener('error', handler) 捕获同步脚本错误(包括 SyntaxError 加载阶段)和资源加载失败(如 JS 文件 404)
  • window.addEventListener('unhandledrejection', handler) 捕获未被 .catch()try...catch 处理的 Promise reject
  • 这两个事件监听器适合做错误上报,但不适合用来“恢复逻辑”,因为错误发生点往往不可控

别忘了:error 事件的 event.error 属性才是实际错误对象;unhandledrejectionevent.reason 才是 reject 的值(可能是 Error 实例,也可能只是字符串)。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>