JavaScript高级程序设计 错误处理与调试学习笔记


Posted in Javascript onSeptember 10, 2011

第十四章 错误处理与调试
1.开启浏览器错误报告
1.1 Internet Explorer
□Toos → Internet Option → Anvanced → Display a notification about every script error
1.2 Firefox
□Tools → Error Console (Firebug)
1.3 Safari
□Edit → Preferences → Advanced → Show develop menu in menubar/Develop → Show Error Console
1.4 Opera
□Tools → Advanced → Error Console
1.5 Chrome
□Control this page → Developer → JavaScript console
2.错误处理
2.1 Try-catch语句
try{
//可能会导致错误的代码
}catch(error){
//错误发生时怎么处理
}
□错误发生时catch快回收到一个包含错误信息的对象。有一个兼容所有浏览器的message属性。
2.1.1 finally子句
try-catch子句可选,finally子句一经使用,其代码无论如何都会执行。
2.1.2 错误类型
□Error:基类型。主要目的是供开发人员抛出自定义错误。
□EvalError:用eval()函数发生异常时抛出。
□RangeError:数值超出相应范围时触发。
□ReferenceError:找不到对象的情况下
□SyntaxError:把语法错误的JavaScript字符串传入eval()函数。
□TypeError:变量中保存着意外的类型时,或访问不存在的方法时。
□URIError:使用encodeURI()或decodeURI(),而URI格式不正确时。
根据不同的错误类型,进行错误处理:
try{
soemFunction();
}catch(error){
if(error instanceof TypeError){
//处理类型错误
}else if(error instanceof ReferenceError){
//处理引用错误
}else{
//处理其他类型错误
}
}
2.1.3 善用try-catch
□使用try-catch语句,浏览器会认为错误已经被处理。
□使用try-catch语句,最适用吹那些我们无法控制的错误。
□明明白白地知道自己代码发生错误就不该用try-catch而是修复错误。
2.2 抛出错误
①与try-catch语句相配有一个throw操作符。在遇到throw操作符时,代码立即停止执行。仅当有try-catch语句捕获到被抛出的值时,代码才会继续执行。
②throw new Error("something bad happened."); 或利用原型链通过继承Error来创建自定义错误类型。
2.2.1 抛出错误的时机
2.2.2 抛出错误与使用try-catch
2.2.3 错误(error)事件
①任何没有通过try-catch处理的错误都会触发window对象的error事件。
②任何浏览器中,onerror事件处理程序都不会创建event对象。但可接受3个参数:错误消息、错误所在的URL和行号。(只有错误消息有用)
③指定onerror事件处理程序,必须使用DOM0级技术。
window.onerror = function(message,url,line){
alert(message);
return false; //通过返回false,此函数实际上充当了整个文档的try-catch语句可捕获所有无代码处理的运行时错误。
};
④图像也支持error事件。只要图像的src特性中URL不能返回可以被识别的图像格式,就会触发error事件。此时的error事件遵循DOM格式,会返回一个以图像为目标的event对象。
3.错误处理策略
3.1 常见的错误类型
□类型转换错误
□数据类型错误
□通信错误
3.1.1 类型转换错误
类型转换错误发生在使用某个操作符,或者使用其他可能会自动转换值的数据类型的语言结构时。在使用相等(==)和不相等(!==)操作符,或者if、for及while等流控制语句中使用非布尔值时,最常发生类型转换错误。
3.1.2 数据类型错误
在预料之外的值传给函数的情况下,最容易发生数据类型错误。
3.1.3 通信错误
①URL格式不正确或发送的数据有问题。对查询字符串,必须使用encodeURIComponent()方法。
②在服务器响应的数据不正确时,也会发生通信错误。
3.2 区分致命错误和非致命错误
①非致命错误
□不影响用户的主要任务
□只影响页面的一部分
□可以恢复
□重复相同操作可以消除错误
②致命错误
□应用程序根本无法运行
□错误明显影响到了用户的主要操作
□会导致其他连带错误
3.3把错误记录到服务器:(略)
4.调试技术
4.1 将消息记录到控制台
①IE8、Firefox、Chrome和Safari来说,可通过console对象向JavaScript控制台中写入消息。对象有下列方法:
□error(message):将错误消息记录到控制台
□info(message):将信息消息记录到控制台
□log(message):将一般消息记录到控制台
□warn(message):将警告消息记录到控制台
②还有一种方案是使用LiveConnect,也就是JavaScript中运行Java代码。
③向JavaScript控制台写入消息的统一接口:
function log(message){
if(typeof console == "object"){
console.log(message);
}else if(typeof opera == "object"){
opera.postError(message);
}else if(typeof java == "object" && typeof java.lang == "object"){
java.lang.System.out.println(message);
}
}
4.2 将消息记录到当前页面
4.3 抛出错误
①对大型应用程序来说,自定义的错误通常使用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;
}
5.常见的IE错误
□操作终止
□无效字符
□未找到成员
□未知运行时错误
□语法错误
□系统无法找到指定资源

Javascript 相关文章推荐
ajax 缓存 问题 requestheader
Aug 01 Javascript
javascript 用函数语句和表达式定义函数的区别详解
Jan 06 Javascript
通过js来制作复选框的全选和不选效果
May 22 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
Apr 03 Javascript
JavaScript  event对象整理及详细介绍
Oct 10 Javascript
JS判断两个对象内容是否相等的方法示例
Apr 10 Javascript
vue实现导航栏效果(选中状态刷新不消失)
Dec 13 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
May 13 Javascript
JavaScript设计模型Iterator实例解析
Jan 22 Javascript
vue简单封装axios插件和接口的统一管理操作示例
Feb 02 Javascript
JS相册图片抖动放大展示效果的示例代码
Jan 29 Javascript
JavaScript高级程序设计 事件学习笔记
Sep 10 #Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 #Javascript
JavaScript高级程序设计 DOM学习笔记
Sep 10 #Javascript
jquery maxlength使用说明
Sep 09 #Javascript
基于jquery可配置循环左右滚动例子
Sep 09 #Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
Sep 09 #Javascript
详谈 Jquery Ajax异步处理Json数据.
Sep 09 #Javascript
You might like
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
php获取淘宝分类id示例
2014/01/16 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
JQuery Dialog的内存泄露问题解决方法
2010/06/18 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
Python and、or以及and-or语法总结
2015/04/14 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Puppeteer使用示例详解
2019/06/20 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
瑞典时尚服装购物网站:Miinto.se
2017/10/30 全球购物
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
出纳岗位职责
2013/11/09 职场文书
汽车销售顾问求职自荐信
2014/01/01 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
计算机实训报告范文
2014/11/05 职场文书
专职安全员岗位职责
2015/04/11 职场文书
音乐课外活动总结
2015/05/09 职场文书
如何撰写促销方案?
2019/07/05 职场文书
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android