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 相关文章推荐
juqery 学习之三 选择器 可见性 元素属性
Nov 25 Javascript
js异步加载的三种解决方案
Mar 04 Javascript
我的Node.js学习之路(二)NPM模块管理
Jul 06 Javascript
JS获取元素多层嵌套思路详解
May 16 Javascript
Bootstrap CSS组件之导航条(navbar)
Dec 17 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
Dec 04 Javascript
layer弹出子iframe层父子页面传值的实现方法
Nov 22 Javascript
微信小程序蓝牙连接小票打印机实例代码详解
Jun 03 Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 Javascript
jstree中的checkbox默认选中和隐藏示例代码
Dec 29 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
Oct 31 Javascript
用JS实现飞机大战小游戏
Jun 09 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/12/08 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
php中explode与split的区别介绍
2012/10/03 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
JS加载器如何动态加载外部js文件
2016/05/26 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
Python中用altzone()方法处理时区的教程
2015/05/22 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
python从入门到精通(DAY 1)
2015/12/20 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
消防安全员岗位职责
2014/03/10 职场文书
科学发展观活动总结
2014/08/28 职场文书
个人务虚会发言材料
2014/10/20 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
初中地理教学反思
2016/02/19 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
nginx lua 操作 mysql
2022/05/15 Servers
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技