鱼C论坛

 找回密码
 立即注册
查看: 3127|回复: 0

[技术交流] Javascript的异常处理介绍

[复制链接]
发表于 2015-7-24 13:24:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

昨天在网上找到一些课程有关的资料,整理一下,与鱼C论坛各位学员共享。
1、错误报告、错误处理以及代码调试,一直被认为是JavaScript的弱项,直到ECMAScript3和ECMAScript4的退出才得到改善。在ECMAScript中将JS的错误分为语法错误(ERROR)和运行期错误(Exception)。

2、不同的浏览器对于异常的处理策略不一样,下面列出了一些常用浏览器对于异常的处理以及一些操作方法:
浏览器类型        处理方法        备注说明
IE        有的版本会对错误进行弹出窗口、有的版本会在状态栏中显示“页面出现错误”       
Mozilla        将错误信息记录的控制台中       
Safari                不对异常进行任何处理        可以通过下列方法进行处理:
A、打开一个命令终端
B、运行命令:defaults write com.apple.Safari IncludeDabugMenu 1
C、重启Safari浏览器
D、此时浏览器中工具栏中已经添加了Debug工具按钮,单击该按钮并选上“Log JavaScript Exceptions”选项
E、在Application/Utilities下打开Console.app,现在就可以显示JS错误了
Opera        与Mozilla相似        可以通过选择菜单栏的窗口-->特殊插件-->JavaScript控制台来打开

3、主流的两种处理异常的方法:onError和try/catch/finally

4、onError是BOM的标准方法,用于捕获异常并进行处理。该方法激活时传递三个参数:ErrorMessage(错误报告消息)、URL(发生错误的URL地址)、LineNumber(错误所在行数)。例如:
Js代码   
1.        onerror = handleErr;  
2.        function handleErr(msg, url, l){  
3.            txt = "本页中存在错误。\n\n";  
4.            txt += "错误:" + msg + "\n";  
5.            txt += "URL: " + url + "\n";  
6.            txt += "行:" + l + "\n\n";  
7.            txt += "点击“确定”继续。\n\n";  
8.            alert(txt);  
9.            return true;  
10.        }  
不幸的是,onError是标准BOM对象,浏览器不同支持的不同,如Safari就不支持该模型方法。

5、try/catch/finally结构,catch捕获的是ExceptionError对象,该对象有两个属性,Name(Error对象的类型)、Message(错误信息)。与Java相比,JS的try/catch不支持一次catch多个异常,但是可以嵌套catch。用户也可以使用throw来抛出自己的异常。例如:
Js代码   
1.        try {   
2.            fo.bar();   
3.        }catch (e) {   
4.            alert(e.name + ": " + e.message);   
5.        }   

6、到目前为止我们常接触到的异常包括:
EvalError:用eval()函数发生异常时抛出
RangeError:数值超出相应范围时触发
ReferenceError:找不到对象的情况下
SyntaxError:把语法错误的JavaScript字符串传入eval()函数
TypeError:变量中保存着意外的类型时,或访问不存在的方法时
URIError:使用encodeURI()或decodeURI(),而URI格式不正确时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 18:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表