Error

语法

new Error([message]])

property

var error = new Error('test');
Object.keys(error);     // []
Object.getOwnPropertyNames(error);      // ['stack', 'message']

Object.getOwnPropertyDescriptor(error, 'message');
// {value: "test", writable: true, enumerable: false, configurable: true}

// FF
Object.getOwnPropertyNames(error);      // ['fileName', 'lineNumber', 'columnNumber', 'message']

message

错误实例的描述信息,创建时候的第一个参数,默认为''

Object.getOwnPropertyDescriptor();

stack

调用堆栈信息,记录有每一步的文件,方法,行号,列号
非标准方法,不过所有执行环境都支持。

Error.prototype

Error.prototype.name

错误实例的类型,如'Error', 'EvalError'

Error.prototype.message

描述信息,值为''

Error types

除了最基本的Error构造函数,还提供了一下类型:

throw

throw 中断程序执行,抛出一个意外或错误。它接受一个表达式作为参数,可以抛出各种值。这个异常可以是String, Number, Boolean 和Object类型。

错误处理

try-catch

try {
    ...
} catch(err) {
    ...
} finally {
    ...
}

window.onerror

window.onerror = function (message, source, lineno, colno, error) {
    ...
};

对于无法预知和try-catch无法覆盖的错误可以使用window.onerror来捕获。 该方法返回true将阻止上层的错误处理方法(此处为浏览器)的执行

element.onerror

element.onerror = function (event) {
    ...
};

global error handler in Node.js

global error handler in react-native

// global.ErrorUtils
ErrorUtils.setGlobalHandler(error => {
    ...
});

error序列化

errio

参考文章