JavaScript 错误处理
JavaScript 编程的一个重要组成部分,是添加错误处理来应对可能会出现的问题。如果没有错误处理,那么在代码执行异常的情况下,JS 脚本可能会执行失败并且页面无法完成加载。为了增强代码的健壮性,我们应该把代码包装在一个 try-catch 块中。
try-catch 块
为了防止代码完全崩溃,可以使用 try-catch 块来处理代码中的问题。如果在执行 JavaScript 的 try 块中的代码时遇到错误,那么它会跳出来,并执行 catch 部分,而不是停止执行整个脚本。当然,如果没有错误,那么整个 try 块将会被执行,并且不会执行 catch 块的代码。
例如,下面代码试图将一个名为 badVarName
的未定义的变量的值赋值到变量 x。
try {
var x = badVarName;
} catch (err) {
console.log(err.name + ': "' + err.message + '" occurred when assigning x.');
}
提示:catch 语句接受一个 err
参数,这是一个 error 对象。error 对象提供 message
属性,它提供了错误的描述。error 对象还提供了一个 name
属性,它是抛出的错误类型的名称。
执行上述代码将会产生一个异常,如下:
ReferenceError: "badVarName is not defined" occurred when assigning x.
抛出自定义错误
我们也可以使用 throw 语句抛出自己的错误。请看下面示例代码:
function sqrRoot(x) {
try {
if (x == "") throw {message:"Can't Square Root Nothing"};
if (isNaN(x)) throw {message:"Can't Square Root Strings"};
if (x < 0) throw {message:"Sorry No Imagination"};
return "sqrt("+x+") = " + Math.sqrt(x);
} catch (err) {
return err.message;
}
}
function writeIt() {
console.log(sqrRoot("four"));
console.log(sqrRoot(""));
console.log(sqrRoot("4"));
console.log(sqrRoot("-4"));
}
writeIt();
执行上述代码,控制台输出如下:
Can't Square Root Strings
Can't Square Root Nothing
sqrt(4) = 2
Sorry No Imagination
使用 finally
异常处理的另一个重要工具是 finally 关键字。我们可以在 try-catch 块的结尾部分添加 finally 关键字,在执行 try-catch 块代码时,无论是否有错误发生,最后都会执行 finally 块中的代码。
下面是一个简单示例:
function testTryCatch(value) {
try {
if (value < 0) {
throw "too small";
} else if (value > 10) {
throw "too big";
}
console.log(value + " is a good number.");
} catch (err) {
console.log("The number was " + err);
} finally {
console.log("This is always written.");
}
}