javascript错误处理
记录一下javascript错误处理的笔记。
- 常见的错误类型
由于javascript是松散类型的,而且也不会验证函数的参数,因此错误只会在代码运行阶段出现,一般来说,需要特别关注三种错误类型:
- 数据转换错误
常见情况有两种:
- 一是使用相等和不相等操作符引发的类型转换,解决方案是使用全等和不全等;
- 二是流程控制中使用非布尔值,解决方案是使用恰当的比较;
- 数据类型错误
建议:
- 流程控制语句中不要使用非布尔值;
- 不要将参数与null和undefined比较;
- 在确切知道应该传入什么类型的情况下,最好使用instance of来检测数据类型
- 通信错误
- 最常见的就是在将数据发送给服务器之前,没有使用encodeURIComponent对数据进行编码;
- 另外,在服务器响应的数据不正确时,也会也会发生同性错误,比如动态加载脚本和样式的时候;
- 数据转换错误
常见情况有两种:
- 错误的处理
- try-catch语句
try-catch语句的标准样式是:
try{ //可能导致错误的代码 }catch{ //在错误发生时怎么处理 }
try-catch语句有一个可选的finally子句,finally语句一经使用,其代码无论如何都会执行,即使在try或catch语句中包含return语句。使用finally语句后,catch语句就成了可选的了。 与try-catch相配的还有throw操作符,用于随时抛出自定义错误,throw操作符是阻塞型的,遇到throw操作符时,代码会立即停止执行。 - error语句 任何没通过try-catch语句处理的错误都会触发window对象的error事件,这个事件并不是所有的浏览器都支持,其中opera和safari就不支持,IE、chrome和Firefox则支持。
- 把错误记录到服务器 这一点在《打造FACEBOOK》一书中也提到了,facebook有一套高效的错误处理工具,可以对错误进行归类、评估,及时提醒相关负责人等,这在大型互联网公司中应该都有,我还没接触过,比较感兴趣,大概的机制应该是ajax发送到后台。
- try-catch语句
try-catch语句的标准样式是:
- 调试技术
- 将消息记录到控制台(用浏览器自带的调试工具调试,如firebug,我一般用chrome自带的)
- 将消息记录到当前页(这个应该没必要)
- 抛出错误(视情况而定,大型错误通常使用assert()函数抛出自定义错误)