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 相关文章推荐
基于jquery的设置页面文本框 只能输入数字的实现代码
Apr 19 Javascript
Javascript 按位左移运算符使用介绍(
Feb 04 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
Jun 05 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
Apr 25 Javascript
JS中常用的正则表达式
Sep 29 Javascript
JS查找字符串中出现最多的字符及个数统计
Feb 04 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
May 08 jQuery
利用ES6的Promise.all实现至少请求多长时间的实例
Aug 28 Javascript
js实现鼠标跟随运动效果
Aug 02 Javascript
javaScript中的空值和假值
Dec 18 Javascript
vue项目中添加单元测试的方法
Jul 21 Javascript
vue拖拽组件使用方法详解
Dec 01 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中http_build_query 的一个问题
2012/03/25 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
python动态参数用法实例分析
2015/05/25 Python
详解Python核心对象类型字符串
2018/02/11 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
Django 用户认证组件使用详解
2019/07/23 Python
详解python中eval函数的作用
2019/10/22 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
《我不是最弱小的》教学反思
2014/02/23 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
单位考核聘任报告
2015/03/02 职场文书
八年级历史教学反思
2016/02/19 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python
前端canvas中物体边框和控制点的实现示例
2022/08/05 Javascript