我对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/>");
}
为什么我也不会在第二种情况下陷入困境?
请理解我的理解。
答案 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>