Error对象

一旦代码解析或运行时发生错误,JavaScript引擎就会自动产生并抛出一个Error对象的实例,然后整个程序就中断在发生错误的地方。

Error对象的实例有三个最基本的属性:

  • name:错误名称
  • message:错误提示信息
  • stack:错误的堆栈(非标准属性,但是大多数平台支持)
  • 利用name和message这两个属性,可以对发生什么错误有一个大概的了解。

    // Error // at throwit (~/examples/throwcatch.js:9:11) // at catchit (~/examples/throwcatch.js:3:9) // at repl:1:5

    上面代码显示,抛出错误首先是在throwit函数,然后是在catchit函数,最后是在函数的运行环境中。

    Error.prototype 对象包含如下属性:

  • constructor--指向实例的构造函数
  • message--错误信息
  • name--错误的名字(类型)
    上述是 Error.prototype 的标准属性, 此外, 不同的运行环境都有其特定的属性. 在例如 Node, Firefox, Chrome, Edge, IE 10+, Opera 以及 Safari 6+ 这样的环境中, Error 对象具备 stack 属性, 该属性包含了错误的堆栈轨迹. 一个错误实例的堆栈轨迹包含了自构造函数之后的所有堆栈结构.
  • const fs = require('fs');
    fs.readdir('/example/i-do-not-exist', function callback(err, dirs) {
        if (err instanceof Error) {
            // `readdir` will throw an error because that directory does not exist
            // We will now be able to use the error object passed by it in our callback function
            console.log('Error Message: ' + err.message);
            console.log('See? We can use Errors without using try statements.');
        } else {
            console.log(dirs);
    });