一、发生错误时,JavaScript 生成一个包含有关其详细信息的对象。然后将该对象作为参数传递给catch:

  1. try {
  2. // ...
  3. } catch(err) { // <-- “error 对象”,也可以用其他参数名代替 err
  4. // ...
  5. }

二、在抛出个人所为的异常时,为了充分利用那些属性(比如你的catch块不能分辨是你个人所为的异常还是系统的异常时),可以使用Error构造函数

  1. function doSomethingErrorProne () {
  2. if (ourCodeMakesAMistake()) {
  3. throw (new Error('The message'));
  4. } else {
  5. doSomethingToGetAJavascriptError();
  6. }
  7. }
  8. ....
  9. try {
  10. doSomethingErrorProne();
  11. } catch (e) {
  12. console.log(e.name); // => 'Error'
  13. console.log(e.message); // => 'The message' or a JavaScript error message
  14. }

内建的 error对象

属性

1、error 对象具有两个主要属性:

  • name:Error 名称,提供了常规的错误类(如DOMException 、 Error 、对于一个未定义的变量,名称是”ReferenceError”)。
  • message:关于 error 的详细文字描述,提供了一条从错误对象转换成字符串的简明信息。

2、还有其他非标准的属性在大多数环境中可用。其中被最广泛使用和支持的是:

  • stack:当前的调用栈:用于调试目的的一个字符串,其中包含有关导致 error 的嵌套调用序列的信息。

    1. try {
    2. lalala; // error, variable is not defined!
    3. } catch(err) {
    4. alert(err.name); // ReferenceError
    5. alert(err.message); // lalala is not defined
    6. alert(err.stack); // ReferenceError: lalala is not defined at (...call stack)
    7. // 也可以将一个 error 作为整体显示出来as a whole
    8. // Error 信息被转换为像 "name: message" 这样的字符串
    9. alert(err); // ReferenceError: lalala is not defined
    10. }

    自定义 Error,扩展 Error

    【见】自定义 Error,扩展 Error:https://www.yuque.com/tqpuuk/yrrefz/gop3x3