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 相关文章推荐
javascript 浏览器检测代码精简版
Mar 04 Javascript
JavaScript和JQuery实用代码片段(一)
Apr 07 Javascript
IE本地存储userdata的一个bug说明
Jul 01 Javascript
基于jquery的一个拖拽到指定区域内的效果
Sep 21 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
May 19 Javascript
一个php+js实时显示时间问题
Oct 12 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
Feb 03 Javascript
jQuery实现可展开折叠的导航效果示例
Sep 12 Javascript
前端 Vue.js 和 MVVM 详细介绍
Dec 29 Javascript
Vuex之理解Getters的用法实例
Apr 19 Javascript
微信小程序“摇一摇”的实例代码
Jul 20 Javascript
Vue项目分环境打包的实现步骤
Apr 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中shuffle数组值随便排序函数用法
2014/11/21 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
PHP实现微信小程序用户授权的工具类示例
2019/03/05 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
JS实现多功能计算器
2020/10/28 Javascript
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
pyqt5使用按钮进行界面的跳转方法
2019/06/19 Python
Python中的延迟绑定原理详解
2019/10/11 Python
Python 中@property的用法详解
2020/01/15 Python
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
西安当代医院管理研究院笔试题
2015/12/11 面试题
中学生团员自我评价分享
2013/12/07 职场文书
小学校园活动策划
2014/01/30 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
高级工程师英文求职信
2014/03/19 职场文书
车辆转让协议书
2014/04/15 职场文书
企业党员一句话承诺
2014/05/30 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
授权收款委托书
2014/09/23 职场文书
推广普通话的宣传语
2015/07/13 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS