博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
错误处理与调试 (14 章 )
阅读量:7175 次
发布时间:2019-06-29

本文共 2578 字,大约阅读时间需要 8 分钟。

1. try – catch 语句
try-catchtry {  // 可能会导致错误的代码} catch( error ) {  // 在错误发生时怎么处理}

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

finallyfunction testFinally() {  try {    return 2;  } catch (error) {    return 1;  } finally {    return 0;  }}

使用 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(变量名)

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

你可能感兴趣的文章
Oracle数据库添加新字段后加载页面报错 java.lang.IllegalArgumentException
查看>>
CSU 1505: 酷酷的单词【字符串】
查看>>
198. 打家劫舍
查看>>
错误之处(二)
查看>>
解决insert语句插入时,需要写列值的问题
查看>>
CSS选择器 < ~ +
查看>>
Opengl_es模型矩阵位置:glFrustumx与glTranslatef参数的相互影响--立方体旋转特效
查看>>
JS小功能系列8省市联动
查看>>
《程序是怎样跑起来的》第八章读后感
查看>>
YCD 软件更新方法
查看>>
CentOS 6.5 + Nginx 1.8.0 + PHP 5.6(with PHP-FPM) 负载均衡源码安装 之 (四)问题汇总
查看>>
mybatis中的#和$的区别
查看>>
synchronized 解决死锁的问题 轉貼
查看>>
poj2524(并查集)买一送一hdu1213
查看>>
ADO.NET详解----核心对象的使用
查看>>
ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined)
查看>>
如何让linux定时任务crontab按秒执行
查看>>
yaf代码生成工具的使用
查看>>
Scrum方法论(四)
查看>>
程序员,请不要抢系统管理员的饭碗
查看>>