我正在尝试从异常对象中获取有用信息(传递给“catch”)并且它在chrome中几乎为空。我之前使用过它,并且能够获得合理的堆栈跟踪等等。这是对chrome的改变,还是我做错了什么?我这样做:
function pr(s) {
document.body.innerHTML += s.toString() + "<br>";
}
function test() {
try {
var a = b; // err: b not defined
} catch (ex) {
pr('==== print exception object =====');
pr(ex);
pr('======= typeof exception object =====');
pr(typeof ex);
pr('===== members ======');
for (var i in ex) {
pr(' ----- ' + i + " ------");
pr(ex[i]);
}
console.log(ex);
}
}
function first() {
second();
}
function second() {
test();
}
first();
在Chrome中,如果我在异常对象上执行toString(),它只给出了字符串“ReferenceError:b is not defined”,但如果我尝试查看对象的各个成员,那么就没有任何内容。值得注意的是,没有“堆叠”成员。然后,如果在控制台中查看,那里还有更多(但堆栈只是“ - ”)
答案 0 :(得分:2)
该连字符表示它是一个吸气剂,并且不会自动执行,因为它可能有副作用。您可以单独记录它们:http://jsfiddle.net/R9Wkg/1/。
错误无法实现的事实在V8's project site处作为问题提交。
答案 1 :(得分:1)
您可以使用Object.getOwnPropertyNames(ex)
获取错误的成员来枚举错误。
pr('===== members ======');
Object.getOwnPropertyNames(ex).forEach(function(i) {
pr(' ----- ' + i + " ------");
pr(ex[i]);
});