错误处理与调试 (14 章 )

1. try – catch 语句
try-catch

finally 语句总会执行,无论是否出错。

finally

使用 try-catch 最适合处理那些我们无法控制的错误,在明明白白的知道自己的代码会发生的错误时,就不要再使用 try-catch语句了。

try {

  window.someNonexistentFunction();

} catch (error) {

  alert(error.message);  // 这个 message 是所有浏览器都支持的

}

抛出错误

与  try-catch 语句相配的还有一个 throw, 例如 throw “hello”,  throw true 都是可以的, 没有类型限制

个人自己设定的抛出异常, 最好还是用这种形式 throw new Error("具体异常的message")

在遇到 throw 操作符时,代码会立即停止执行,仅当有 try-catch 语句捕获到被抛出的值时,代码才会继续执行。

function process(values) {

  if (!(values instanceof Array)) {

    throw new Error("process(): Argument must be an array.");

  }

}

自己测试的抛出异常

try {
     throw new Error("xxx");
    } catch(error) {
     alert(error.message);
} finally {
     alert("The last one");

}

异常的执行步骤, 跟java一样, 即出现异常后, 程序不会继续执行, 而是到 catch 看捕获情况, finally 最后怎么样都会执行. 以上代码, 执行结果会先显示 "xxx" 再显示 "The last one"

2. 错误的类型

- Error

  Error类型的错误很少见,如果有也是浏览器抛出的,这个基类型的主要目的是供开发人员抛出自定义错误。

- EvalError

   会在使用 eval()函数而发生异常时被抛出。

- RangeError

   超出范围

- ReferenceError

   找不到对象

- syntaxError

   语法错误

- TypeError

   类型错误, 例如 var o = new 10;  最常发生的就是传递参数时,发生的类型不同

- URIError

  使用 encodeURI() 或 decodeURI() 而URI格式不正确时,会导致 URIError

常见的错误

1. 类型转换错误, 例子, 如下:

 1 function concat(str1, str2, str3) {
 2     var result = str1 + str2;
 3     if (str3) {    // 绝对不要这样
 4         result += str3;
 5     }
 6     return result;
 7 }
 8 // 如上例, 绝对不要这样, 这个函数的用意是拼接两或三个字符串, 其中, 第3个字符串是可选的, 因此必须要检查, 但是未使用过的命名变量会自动被赋给 undefined值, 而undefined值可以被转换成布尔值 false. 所以, 参考如下:
 9 
10 function concat(str1, str2, str3) {
11     var result = str1 + str2;
12     if (typeof str3 == "string") {    // 比较恰当
13         result += str3;
14     }
15     return result;
16 ]

2. 数据类型错误

 1 function reverseSort(values) {
 2     if (values != null) {    // 绝对不要这样
 3         values.sort();
 4         values.reverse();
 5     }
 6 }
 7 // 任何一个非数组参数, 都将导致错误
 8 // 改为以下办法
 9 function reverseSort(values) {
10     if (typeof values instanceof Array) {    // 问题解决了
11         values.sort();
12         values.reverse();
13     }
14 }

调试

以前经常使用 alert 来显示结果和错误, 现在可以使用控制台来完成, 可以通过 console 对象向 javascript 控制台中写入消息, 这个对象具有下列方法.

error(message): 将错误消息记录到控制台

info(message): 将信息性消息记录到控制台

log(message): 将一般消息记录到控制台

warn(message): 将警告消息记录到控制台

例如:

1 function sum(num1, num2) {
2     console.log("Entering sum(), arguments are " + num1 + "," + num2);
3     console.log("Before calculation");
4     var result = num1 + num2;
5     console.log("After calculation");
6     
7     console.log("Exiting sum()");
8     return result;
9 }

console.log(变量名)

很多浏览器工具提供了一些调试,比如单步跟踪。

posted @ 2012-11-26 17:39  神之一招  阅读(248)  评论(0编辑  收藏  举报