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 相关文章推荐
JS命名空间的另一种实现
Aug 09 Javascript
toggle()隐藏问题的解决方法
Feb 17 Javascript
一个JavaScript用逗号分割字符串实例
Sep 22 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
Jan 05 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
Jun 06 Javascript
在Docker快速部署Node.js应用的详细步骤
Sep 02 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
Sep 20 Javascript
JavaScript中双向数据绑定详解
May 03 Javascript
JavaScript中最常用的10种代码简写技巧总结
Jun 28 Javascript
react-native-tab-navigator组件的基本使用示例代码
Sep 07 Javascript
Vue封装的组件全局注册并引用
Jul 24 Javascript
antd Select下拉菜单动态添加option里的内容操作
Nov 02 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为php增加openssl模块的方法
2011/06/14 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
JS防止用户多次提交的简单代码
2013/08/01 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
python控制台显示时钟的示例
2014/02/24 Python
python numpy函数中的linspace创建等差数列详解
2017/10/13 Python
pandas 选择某几列的方法
2018/07/03 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
采用怎样的方法保证数据的完整性
2013/12/02 面试题
会计电算化应届生求职信
2013/11/03 职场文书
技术总监管理职责范本
2014/03/06 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
优秀班组长事迹
2014/05/31 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL