3.6 抛出错误
抛出错误是调试代码的很好方式。如果错误消息足够具体,只要看一眼错误就可以确定原因。好的错误消息包含关于错误原因的确切信息,因此可以减少额外调试的工作量。比如下面的函数:
function divide(num1, num2) {
return num1 / num2;
}
这个简单的函数执行两个数的除法,但如果任何一个参数不是数值,则返回 NaN。当 Web 应用程序意外返回 NaN 时,简单的计算可能就会出问题。此时,可以检查每个参数的类型是不是数值,然后再进行计算。来看下面的例子:
function divide(num1, num2) {
if (typeof num1 != "number" || typeof num2 != "number"){
throw new Error("divide(): Both arguments must be numbers.");
}
return num1 / num2;
}
这里,任何一个参数不是数值都会抛出错误。错误消息中包含函数名和错误的具体原因。当浏览器报告这个错误消息时,你立即就能根据它包含的信息定位到问题,包括问题的解决方案。相对于没那么具体的浏览器错误消息,这个错误消息显示更有价值。
在大型应用程序中,自定义错误通常使用 assert()函数抛出错误。这个函数接收一个应该为 true的条件,并在条件为 false 时抛出错误。下面是一个基本的 assert()函数:
function assert(condition, message) {
if (!condition) {
throw new Error(message);
}
}
这个 assert()函数可用于代替多个 if 语句,同时也是记录错误的好地方。下面的代码演示了如何使用它:
function divide(num1, num2) {
assert(typeof num1 == "number" && typeof num2 == "number",
"divide(): Both arguments must be numbers.");
return num1 / num2;
}
相比于之前的例子,使用 assert()函数可以减少抛出自定义错误所需的代码量,并且让代码更好理解。