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 判断 object 的特定类转载
Feb 01 Javascript
LazyLoad 延迟加载(按需加载)
May 31 Javascript
JavaScript中反正弦函数Math.asin()的使用简介
Jun 14 Javascript
javascript 闭包详解
Jul 02 Javascript
Javascript基础_标记文字的实现方法
Jun 14 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
Aug 31 Javascript
JS中使用 after 伪类清除浮动实例
Mar 01 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
Jun 07 Javascript
详解如何从零开始搭建Express+Vue开发环境
Jul 17 Javascript
vue前后分离调起微信支付
Jul 29 Javascript
vue之组件内监控$store中定义变量的变化详解
Nov 08 Javascript
js实现抽奖的两种方法
Mar 19 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函数in_array()使用详解
2014/08/20 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
python中模块查找的原理与方法详解
2017/08/11 Python
解析Python3中的Import
2019/10/13 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
荷兰手表网站:Watch2Day
2018/07/02 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
大学军训感言400字
2014/03/11 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
致青春观后感
2015/06/09 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
Nginx配置根据url参数重定向
2022/04/11 Servers
Python使用openpyxl模块处理Excel文件
2022/06/05 Python