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 相关文章推荐
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
js判断输入是否为数字的具体实例
Aug 03 Javascript
Javascript实现返回上一页面并刷新的小例子
Dec 11 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
Feb 11 Javascript
基于jquery实现人物头像跟随鼠标转动
Aug 23 Javascript
Node.js模块封装及使用方法
Mar 06 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
解析JavaScript中的字符串类型与字符编码支持
Jun 24 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
Jun 18 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
Nov 08 jQuery
详解vue+axios给开发环境和生产环境配置不同的接口地址
Aug 16 Javascript
全面解析js中的原型,原型对象,原型链
Jan 25 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
基于mysql的论坛(3)
2006/10/09 PHP
微信支付开发告警通知实例
2016/07/12 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
一段批量给页面上的控件赋值js
2010/06/19 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
基于NodeJS的前后端分离的思考与实践(二)模版探索
2014/09/26 NodeJs
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
webpack 模块热替换原理
2018/04/09 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
python中logging库的使用总结
2017/10/18 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
创建Django项目图文实例详解
2019/06/06 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
计算机应用毕业生自荐信
2013/10/23 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
协议书的格式
2014/04/23 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
部队2015年终工作总结
2015/04/02 职场文书
用电申请报告范文
2015/05/18 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
Go语言实现Snowflake雪花算法
2021/06/08 Golang