1. JavaScript中的异常
1.1 所有异常都是Error的子类
```javascript RefenceError instanceof Error // true;
class CustomError extends Error {}
<a name="fwbSP"></a>
### 1.2 error会导致代码不再往下执行
```javascript
console.log(b);
console.log('hello'); // 不被执行
1.3 try catch 可以捕获并消化掉error
try {
console.log(b);
}
catch(err) {
const { message, stack } = err;
console.log(message); // b is not defined
console.log(stack); // ReferenceError: b is not defined at javascript-error.html:36
}
console.log('hello'); // hello
1.4 window.onerror 和 window.addEventListener可以捕获error
注意:错误代码,应该在window.onerror 或 window.addEventListener之后执行,否则捕获不到
window.onerror = function(msg, url, line) {
return true; // true 代表已经处理,不会往外再抛出
}
console.log(b);
console.log('hello'); // 不执行
window.onerror = function(msg, url, line) {
return false; // false 代表未处理,外再抛出
}
// 浏览器error输出
console.log(b); // Uncaught ReferenceError: b is not defined at javascript-error.html:32
console.log('hello'); // 不执行
window.addEventListener('error', err => {
const { error: { message, stack } } = err;
return true; //不管返回什么,都会被抛出
});
console.log(b);
console.log('hello'); // 不会执行