查询Javascript异常处理

时间:2013-01-04 18:06:46

标签: javascript exception-handling

我对Javascript异常处理感到困惑,我想清楚Javascript可以捕获哪个错误,或者只有elses可以处理哪个错误 比如下面的情况,在第一种情况下,由于未定义的变量,我最终进入了catch块,但在其他情况下我留在了try块(并且必须使用if else来捕获它),尽管两者都是"未定义&#34 ;

第一

try {
    var x = 90;
    var value = x / y;
}
catch (err) {
    document.write(err.name + ": " + err.message + "<br/>");
}

第二:

function add(x, y) {
    var resultString = "Hello! The result of your math is: ";
    var result = x + y;
    // return resultString + result; not returning  anything; hence, "undefined" also
}

try {
    var addResult = add(2, 3);
    document.write(" the result is : " + addResult + "<br/>");
} catch (err) {
    document.write(err.name + ": " + err.message + "<br/>");
}

为什么我也不会在第二种情况下陷入困境?

请理解我的理解。

2 个答案:

答案 0 :(得分:1)

在第一种情况下,你没有在任何地方定义y,因此抛出了一个由catch块捕获的异常,但在第二种情况下,你定义了addResult=undefined并且你只是显示了值,所以那里也不例外

如果您的第一个案例是

try {
    var x = 90;
    var y = undefined;
    var value = x / y;
}
catch (err) {
    document.write(err.name + ": " + err.message + "<br/>");
}

然后在第一种情况下也没有例外。

希望你明白了:)

答案 1 :(得分:1)

因为第二个例子中没有任何错误。唯一的问题是addResult不返回任何内容,这会导致undefined值。但是,这不是错误。 您的第一个示例仅仅因为y变量未声明事件(它甚至没有undefined值)而捕获异常。

你可以在这里看到这个:

<script type="text/javascript">
//Error
try{
    alert(x);
}catch(e){
    alert(e.name + ': ' + e.message);
}
//Ok
try{
    var x;
    alert(x);
}catch(e){
    alert(e.name + ': ' + e.message);
}
</script>