如何枚举 Javascript 中的错误对象?

jdw*_*jdw 0 javascript

我环顾四周,但未能找到这个问题的答案。

我想要做的是打印 Error 对象中可用的所有属性以进行错误报告。这可能是不可能的,但我至少想知道为什么。

我在 Ubuntu 12.04 上的 Chrome 和 Firefox 中尝试了以下操作。

try {
   throw new Error('Foo');
} catch (x) {
   console.log(Object.keys(x)); // []
   for (var i in x) console.log(i); // Prints nothing
}
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 5

错误对象键的可枚举性因浏览器而异。你最好的选择是使用Object.getOwnPropertyNames

var props = Object.getOwnPropertyNames(x);
console.log(props);
for (var i=0; i<props.length; i++) console.log(x[props[i]]);
Run Code Online (Sandbox Code Playgroud)

我需要一些东西发送回服务器以进行错误报告。

我会明确命名我感兴趣的属性,例如:

reportErrorBack( JSON.stringify({
    name: e.name, // on the Error.prototype
    message: e.message,
    stack: e.stacktrace
});
Run Code Online (Sandbox Code Playgroud)