异常类型

10 小时前(已编辑)
/ ,
4

异常类型

JS的异常报错类型

  1. Error 所有错误对象的基类。自己也可以直接 throw new Error('msg') 产生自定义错误。
  2. SyntaxError 代码在解析阶段不符合语法规则。 例:eval('1 +') 抛出 SyntaxError: Unexpected token ')'
  3. ReferenceError 访问了不存在的变量 / 词法绑定。 例:console.log(foo) 而 foo 未声明。
  4. TypeError 值的类型不符合预期或对象内部方法/属性不可调用。 例:null.f() 或 Object.create(undefined)
  5. RangeError 数值超出合法范围。 例:new Array(-1) 或 (10).toString(37)(基数必须在 2–36)。
  6. URIError encodeURI、decodeURI、encodeURIComponent、decodeURIComponent 失败。 例:decodeURI('%') 抛出 URIError: URI malformed。
  7. EvalError 早期用于表示 eval() 使用不当(如严格模式下给 eval 赋值)。现代实现几乎不再抛出,仅保留兼容性。
  8. AggregateError 多个错误需要聚合为一个错误时抛出,最常见于 Promise.any() 全部拒绝。

JS如何捕获异步任务异常(除了.then().catch())

  1. try…catch + async/await: javascript async function run() { try { await someAsync(); } catch (e) { console.error(e); } }

全局兜底:
– window.addEventListener('error', ...)(普通脚本/资源)
– window.addEventListener('unhandledrejection', ...)(Promise 未捕获)

/***********************
 * 1. 捕获普通运行时错误 *
 ***********************/
window.addEventListener('error', function (event) {
  // event.filename / lineno / colno / error 等字段可用
  console.error('[全局 error]', event.error || event.message);
  // 返回 true 表示“已处理”,浏览器控制台不再重复输出
  return true;
});

/*************************
 * 2. 捕获资源加载错误   *
 *   <img>/<script>/<link> *
 *************************/
window.addEventListener('error', function (event) {
  // 运行时错误 event.target === window
  // 资源加载错误 event.target 是 <img>/<script>/...
  if (event.target !== window) {
    console.error('[资源加载失败]', event.target.tagName, event.target.src || event.target.href);
    return true;
  }
}, true); // 捕获阶段,确保能拦截资源错误

/*************************
 * 3. 捕获未处理 Promise *
 *************************/
window.addEventListener('unhandledrejection', function (event) {
  console.error('[未处理 Promise]', event.reason);
  // 阻止默认控制台输出
  event.preventDefault();
});

/****** 下面制造一些错误,用来验证 ******/

// 3.1 宏任务里抛错
setTimeout(() => {
  throw new Error('宏任务中的错误');
});

// 3.2 未处理的 Promise 拒绝
Promise.reject(new Error('Promise 未捕获'));

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...