一、错误类型:
1、语法错误:`SyntaxError`
2、引用错误:`Uncaught ReferenceError`
3、范围错误:`RangeError`
4、类型错误:`TypeError`
5、URL错误:`URLError`
6、promise/async/await错误
7、js运行错误
8、资源加载错误
二、怎么捕获
1. async/await的错误可以通过 `try catch` 进行捕获
2. window.addEventListener('error')可以捕获资源加载错误
为避免重复上报js运行时错误,此时只有
event.srcElement inatanceof HTMLScriptElement或
event.srcElement inatanceof HTMLLinkElement或
event.srcElement inatanceof HTMLImageElement 时才进行数据采集。
3. window.onerror 可以捕获大部分的js运行错误,但是资源加载错误不行
4. promise的错误,可以使用 `.catch` 来捕获
5. window.addEventListener('unhandledrejection')捕获未处理的promise reject错误
三、try catch 为啥不能捕获promise异常
try-catch 主要用于捕获异常,注意,这里的异常,是指同步函数的异常,
如果 try 里面的异步方法出现了异常,此时catch 是无法捕获到异常的。
原因是因为:当异步函数抛出异常时,对于宏任务而言,执行函数时已经将该函数推入栈,
此时并不在 try-catch 所在的栈,所以 try-catch 并不能捕获到错误。
对于微任务而言,比如 promise,promise 的构造函数的异常只能被自带的 reject 也就是.catch 函数捕获到