1. JavaScript中的异常

1.1 所有异常都是Error的子类

和错误处理有关的知识 - 图1```javascript RefenceError instanceof Error // true;

class CustomError extends Error {}

  1. <a name="fwbSP"></a>
  2. ### 1.2 error会导致代码不再往下执行
  3. ```javascript
  4. console.log(b);
  5. console.log('hello'); // 不被执行

1.3 try catch 可以捕获并消化掉error

  1. try {
  2. console.log(b);
  3. }
  4. catch(err) {
  5. const { message, stack } = err;
  6. console.log(message); // b is not defined
  7. console.log(stack); // ReferenceError: b is not defined at javascript-error.html:36
  8. }
  9. console.log('hello'); // hello

1.4 window.onerror 和 window.addEventListener可以捕获error

注意:错误代码,应该在window.onerror 或 window.addEventListener之后执行,否则捕获不到

  1. window.onerror = function(msg, url, line) {
  2. return true; // true 代表已经处理,不会往外再抛出
  3. }
  4. console.log(b);
  5. console.log('hello'); // 不执行
  1. window.onerror = function(msg, url, line) {
  2. return false; // false 代表未处理,外再抛出
  3. }
  4. // 浏览器error输出
  5. console.log(b); // Uncaught ReferenceError: b is not defined at javascript-error.html:32
  6. console.log('hello'); // 不执行
  1. window.addEventListener('error', err => {
  2. const { error: { message, stack } } = err;
  3. return true; //不管返回什么,都会被抛出
  4. });
  5. console.log(b);
  6. console.log('hello'); // 不会执行