JS中的异常处理方法分享


Posted in Javascript onDecember 22, 2013

js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要不用户体验不好)

window.onerror=function(){return true;}

下面是为了获取js异常信息,方便开发者找回问题

1,try...catch...

<script type="text/javascript">
var txt=""
function message()
{
try
   {
   adddlert("Welcome guest!")
   }
catch(err)
   {
     txt="本页中存在错误。\n\n"
     txt+="点击“确定”继续查看本页,\n"
     txt+="点击“取消”返回首页。\n\n"
     if(!confirm(txt))
         {
         document.location.href="/index.html"
         }
   }
}
</script>

2 ,throw

<script type="text/javascript">
var x=prompt("请输入 0 至 10 之间的数:","")
try
{
if(x>10)
  throw "Err1"
else if(x<0)
  throw "Err2"
else if(isNaN(x))
  throw "Err3"
}
catch(er)
{
if(er=="Err1")
  alert("错误!该值太大!")
if(er == "Err2")
  alert("错误!该值太小!")
if(er == "Err3")
  alert("错误!该值不是数字!")
}
</script>

3,onerror:

<script type="text/javascript">
onerror=handleErr
var txt=""
function handleErr(msg,url,l)
{
txt="本页中存在错误。\n\n"
txt+="错误:" + msg + "\n"
txt+="URL: " + url + "\n"
txt+="行:" + l + "\n\n"
txt+="点击“确定”继续。\n\n"
alert(txt)
return true
}
function message()
{
adddlert("Welcome guest!")
}
</script>

js中的异常处理

在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 array 数组详解
Mar 22 Javascript
基于Asp.net与Javascript控制的日期控件
May 22 Javascript
jQuery简单实现上下,左右滑动的方法
Jun 01 Javascript
jQuery获取浏览器类型和版本号的方法
Jul 05 Javascript
JS常用算法实现代码
Nov 14 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
Jan 21 Javascript
面试常见的js算法题
Mar 23 Javascript
关于Stream和Buffer的相互转换详解
Jul 26 Javascript
AngularJS实现的输入框字数限制提醒功能示例
Oct 26 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 jQuery
原生js实现碰撞检测
Mar 12 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
Jan 29 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
Dec 22 #Javascript
判断文件是否正在被使用的JS代码
Dec 21 #Javascript
jquery鼠标停止移动事件
Dec 21 #Javascript
JS delegate与live浅析
Dec 21 #Javascript
jQuery中delegate与on的用法与区别示例介绍
Dec 20 #Javascript
jquery数组之存放checkbox全选值示例代码
Dec 20 #Javascript
jquery如何通过name名称获取当前name的value值
Dec 20 #Javascript
You might like
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
解析左右值无限分类的实现算法
2013/06/20 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
js 显示base64编码的二进制流网页图片
2014/04/04 Javascript
vuex实现简易计数器
2016/10/27 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
JavaScript原型式继承实现方法
2019/11/06 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
Python中针对函数处理的特殊方法
2014/03/06 Python
Python实现将xml导入至excel
2015/11/20 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
关于感恩的演讲稿800字
2014/08/26 职场文书
法定代表人授权委托书
2014/09/19 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL