chrome异常对象(几乎)为空

时间:2011-10-12 19:36:08

标签: javascript google-chrome

我正在尝试从异常对象中获取有用信息(传递给“catch”)并且它在chrome中几乎为空。我之前使用过它,并且能够获得合理的堆栈跟踪等等。这是对chrome的改变,还是我做错了什么?我这样做:

http://jsfiddle.net/R9Wkg/

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('&nbsp;----- ' + i + " ------");
            pr(ex[i]);
        }
        console.log(ex);
    }
}

function first() {
    second();
}

function second() {
    test();
}

first();

在Chrome中,如果我在异常对象上执行toString(),它只给出了字符串“ReferenceError:b is not defined”,但如果我尝试查看对象的各个成员,那么就没有任何内容。值得注意的是,没有“堆叠”成员。然后,如果在控制台中查看,那里还有更多(但堆栈只是“ - ”)

2 个答案:

答案 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('&nbsp;----- ' + i + " ------");
    pr(ex[i]);
});

http://jsfiddle.net/gilly3/R9Wkg/3/