3.10 处理错误
即使你有多年使用计算机的经验,但是你站点的许多用户很可能没什么经验。因此,应该向他们提供有意义的错误消息,而不是大多数浏览器在拒绝用户的操作时返回的莫名其妙的消息。脚本3-13演示如何使用JavaScript的try/throw/catch命令产生友好的有用的消息。我们将这个功能放在一个简单的平方根计算器中。
脚本3-13 这个脚本用JavaScript适当地处理错误
window.onload = initAll;
function initAll() {
var ans = prompt("Enter a number","");
try {
if (!ans || isNaN(ans) || ans<0) {
throw new Error("Not a valid number");
}
alert("The square root of " + ans + " is " + Math.sqrt(ans));
}
catch (errMsg) {
alert(errMsg.message);
}
}
适当地处理错误的步骤如下:
(1) var ans = prompt("Enter a number", "");
这是一个普通的提示,我们把它存储在ans变量中供以后使用。在这个示例中,我们希望用户输入一个数字。如果用户确实输入了合适的数字,JavaScript就会显示他们输入的数字的平方根。
(2) try {
但是,如果他们没有输入数字(如图3-8所示),那么代码能够捕捉到这一错误并显示有意义的消息。即使用户在要求他们输入数字时输入了单词,我们也能够有礼貌地发出提示。首先使用try命令。在这块代码中,我们检查用户的输入是否有效。

图3-8 我们要求用户输入数字,但是用户可能输入任何东西,比如文本
(3) if (!ans || isNaN(ans) || ans<0) {
throw new Error("Not a valid number");
}
我们要关注三种情况:根本没有输入;用户输入了某些东西,但不是数字;输入的是数字,但它是负数(因为负数的平方根是虚数,这超出了这个示例的范围)。如果!ans是true,就意味着用户没有输入任何东西。内置的isNaN()方法检查传递给它的参数是否“不是数字(Not a Number)”。如果isNaN()返回true,就说明输入的内容是无效的。如果ans小于0,它就是负数。对于以上任何情况,都希望抛出一个错误,它指出“Not a valid number(不是有效的数字)”。当抛出错误之后,JavaScript跳出try块并寻找对应的catch语句。因此,try块中其余的代码都被跳过。
(4) alert("The square root of " + ans + " is " + Math.sqrt(ans));
如果输入了有效的内容,就显示平方根,如图3-9所示。

图3-9 这是输入有效的数字时脚本的结果
(5) }
这个后花括号结束try块。
(6) catch (errMsg) {
alert(errMsg.message);
}
这是出现错误时要使用的catch语句。error作为参数传递给它,它显示错误的message部分(图3-10)。如果没有抛出错误,catch中的代码就不会执行。

图3-10 如果输入了错误的数据,就告诉用户
ü提示
q 还有一个可选部分:最后的{}块。这个部分放在catch后面,无论try块是否抛出错误,这里包含的代码都应该执行。







