js中的异常处理try...catch使用介绍


Posted in Javascript onSeptember 21, 2013

在JavaScript可以使用try...catch来进行异常处理。例如:

try { foo.bar();} catch (e) { alert(e.name + ": " + e.message);}

目前我们可能得到的系统异常主要包含以下6种:

EvalError: raised when an error occurs executing code in eval()
RangeError: raised when a numeric variable or parameter is outside of its valid range
ReferenceError: raised when de-referencing an invalid reference
SyntaxError: raised when a syntax error occurs while parsing code in eval()
TypeError: raised when a variable or parameter is not a valid type
URIError: raised when encodeURI() or decodeURI() are passed invalid parameters

上面的六种异常对象都继承自Error对象。他们都支持以下两种构造方法:

new Error();new Error("异常信息");

手工抛出异常的方法如下:

try { throw new Error("Whoops!");} catch (e) { alert(e.name + ": " + e.message);}

如要判断异常信息的类型,可在catch中进行判断:
try { foo.bar();} catch (e) { if (e instanceof EvalError) { alert(e.name + ":" + e.message); } else if (e instanceof RangeError) { alert(e.name + ": " + e.message); } // etc }

Error具有下面一些主要属性:

description: 错误描述 (仅IE可用).
fileName: 出错的文件名 (仅Mozilla可用).
lineNumber: 出错的行数 (仅Mozilla可用).
message: 错误信息 (在IE下同description)
name: 错误类型.
number: 错误代码 (仅IE可用).
stack: 像Java中的Stack Trace一样的错误堆栈信息 (仅Mozilla可用).

因此为了更好的了解错误信息我们可以将catch部分改为如下形式:

try { foo.bar();} catch (e) { if (browserType != BROWSER_IE) { 
alert("name: " + e.name + "message: " + e.message + "lineNumber: " + e.lineNumber + "fileName: " + e.fileName + "stack: " + e.stack); 
} else { 
alert("name: " + e.name +"errorNumber: " + (e.number & 0xFFFF ) + "message: " + e.message"); 
} }

JavaScript中的throw命令事实上可以抛出任何对象,并且我们可以在catch接受到此对象。例如:
try { throw new Date(); // 抛出当前时间对象 } catch (e) { alert(e.toLocaleString()); // 使用本地格式显示当前时间 }
Javascript 相关文章推荐
根据分辨率不同,调用不同的css文件
Aug 25 Javascript
一些常用的JS功能函数代码
Jun 23 Javascript
jQuery easyui datagrid动态查询数据实例讲解
Feb 26 Javascript
JavaScript对象数组的排序处理方法
Oct 21 Javascript
AngularJS中关于ng-class指令的几种实现方式详解
Sep 17 Javascript
Javascript动画效果(4)
Oct 11 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
Sep 11 jQuery
JQuery 选择器、DOM节点操作练习实例
Sep 28 jQuery
js时间戳与日期格式之间转换详解
Dec 11 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
Oct 15 Javascript
layer更改皮肤的实现方法
Sep 11 Javascript
详解小程序BackgroundAudioManager踩坑之旅
Dec 08 Javascript
使用JS读秒使用示例
Sep 21 #Javascript
用RadioButten或CheckBox实现div的显示与隐藏
Sep 21 #Javascript
JS.GetAllChild(element,deep,condition)使用介绍
Sep 21 #Javascript
JS.findElementById()使用介绍
Sep 21 #Javascript
JS.getTextContent(element,preformatted)使用介绍
Sep 21 #Javascript
javascript实现原生ajax的几种方法介绍
Sep 21 #Javascript
使用javascript实现页面定时跳转总结篇
Sep 21 #Javascript
You might like
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
PHP实现用户认证及管理完全源码
2007/03/11 PHP
php开发文档 会员收费1期
2012/08/14 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
提高php编程效率技巧
2015/08/13 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
简单的三步vuex入门
2018/05/20 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
Python导入oracle数据的方法
2015/07/10 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
学python安装的软件总结
2019/10/12 Python
Fossil美国官网:Fossil手表、手袋、珠宝及配件
2017/02/01 全球购物
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
上海某公司.net方向笔试题
2014/09/14 面试题
销售自荐信
2013/10/22 职场文书
20年同学聚会邀请函
2014/02/04 职场文书
销售会议开幕词
2015/01/28 职场文书
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫