《JavaScript高级程序设计》读书笔记
(四) 学习在浏览器中进行实际开发时的错误调试技巧。(17章)
第十七章 错误处理与调试
错误处理
try-catch 语句:
try-catch 语句 和 Java 很类似。
function testFinally(){
try {
return 2;
} catch (error){
return 1;
} finally {
return 0;
}
}
function testWithoutFinally(){
try {
return 2;
} catch (error){
return 1;
}
}
alert(testFinally());
alert(testWithoutFinally());
我们把可能会抛出错误的语句放到 try 语句中,处理错误的代码放到 catch 块中,finally 语句块无论如何都会执行。
抛出错误:与 try-catch 语句相配的还有一个 throw 操作符,用于随时抛出自定义错误 。
在遇到 throw 操作符时,代码会立即停止执行。仅当有 try-catch 语句捕获到被抛出的值时,代码才回继续执行。
if (!(values instanceof Array)){
throw new Error("process(): Argument must be an array.");
}
捕获错误的目的在于避免浏览器以默认方式处理它们;而抛出错误的目的在于提供错误发生具体原因的消息。
常见的错误类型:类型转换错误、数据类型错误、通信错误。
调试技术
将消息记录到控制台:通过 console 对象向 JavaScript 控制台中写入消息。
error(message): 将错误消息记录到控制台
info(message): 将信息性消息记录到控制台
log(message): 将一般消息记录到控制台
warn(message): 将警告消息记录到控制台
将消息记录到当前页面:在页面中开辟一小块区域,用以显示消息。
抛出错误:自定义 assert() 函数。
两个参数,一个是求值结果应该为true的条件,另一个是条件为false时要抛出的错误。
function assert(condition, message){
if (!condition){
throw new Error(message);
}
}
function divide(num1, num2){
assert(typeof num1 == "number" && typeof num2 == "number",
"divide(): Both arguments must be numbers.");
return num1 / num2;
}
var result = divide(10, 23);
result = divide("hi", 3);