使用ajax记录try {...} catch(e){...}:可能吗?

时间:2011-09-15 13:56:24

标签: javascript ajax exception logging

当我在chrome控制台中尝试以下操作时,我将'未定义'作为'e'的值:

try{
    var test=somethingInvalid();
}
catch(e){
    console.log(e);
}

如何访问e?

的详细信息

它有什么属性?

感谢。


卫生署。执行console.log('E is:'+ e)接缝工作。遗憾!

5 个答案:

答案 0 :(得分:2)

好吧,它会返回undefined,因为最后一行console.log没有返回值。

try{
    false = true;
}
catch(e){
    console.log(e);
}

但是通过上述内容,您还会看到一个对象> Reference Error,然后是下一行undefined

enter image description here

答案 1 :(得分:0)

根据MDN,它是throw声明中的值。

https://developer.mozilla.org/en/JavaScript/Reference/Statements/try...catch

  

例外标识符

     

如果在try块中抛出异常,exception_var(例如   e中的catch (e)包含throw语句指定的值。   您可以使用此标识符来获取有关异常的信息   被扔了。

     

此标识符是catch子句的本地标识符。也就是说,它被创建了   何时输入catch子句,以及catch子句完成后   执行时,标识符不再可用。

答案 2 :(得分:0)

据我所知,Chrome确实输出了'e'的详细信息。我刚刚这样做了:

var err;
try { /* what you did */ }
catch (e) { err = e; }

Chrome会向您显示“e”的详细信息。

在这种情况下,您可以执行调用以查看以下内容:

  • err.name
  • err.arguments
  • err.type
  • err.stack
祝你好运!

答案 3 :(得分:0)

虽然提供的所有答案都非常有用,但我们所寻求的是:

try{
    var test=somethingThatDoesntExist();
}
catch(e){
    console.log(e.message);
}

e.message是我们想要记录的变量,因为它(据我们所知)包含了捕获的错误的字符串表示。

谢谢!

答案 4 :(得分:0)

我有一个自定义assert()函数,它可以提取函数的堆栈跟踪(在所有现代浏览器中,IE除外):

if (!condition) {
    try {
        throw Error();
    } catch (e) {
        // Browsers Firefox, Chrome, Opera provide additional stack property;
        // Check if it does not exist (IE);
        stackTrace = (!e.stack) ? "No stack available" : e.stack;
        self.reportError(errorType, stackTrace, message);
    }
}

显然,我所展示的内容还有很多,但这个想法就在那里。