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 相关文章推荐
jQuery 性能优化指南(3)
May 21 Javascript
jquery 锁定弹出层实现代码
Feb 23 Javascript
鼠标选择动态改变网页背景颜色的JS代码
Dec 10 Javascript
document.compatMode的CSS1compat使用介绍
Apr 03 Javascript
JQuery1.8 判断元素是否绑定事件的方法
Jul 10 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
Aug 31 Javascript
高性能JavaScript循环语句和条件语句
Jan 20 Javascript
Jquery $when done then的用法详解
May 20 Javascript
ES6中的Promise代码详解
Oct 09 Javascript
Vue cli+mui 区域滚动的实例代码
Jan 25 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
Feb 19 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
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
jquery+javascript编写国籍控件
2015/02/12 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
js倒计时显示实例
2016/12/11 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
vue video和vue-video-player实现视频铺满教程
2020/10/30 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
Python判断变量名是否合法的方法示例
2019/01/28 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
完美解决python3.7 pip升级 拒绝访问问题
2019/07/12 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
Python timeit模块的使用实践
2020/01/13 Python
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
医生进修自我鉴定
2014/01/19 职场文书
社区国庆节活动方案
2014/02/05 职场文书
分公司任命书
2014/06/06 职场文书
大学迎新标语
2014/06/26 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
员工考勤管理制度
2015/08/06 职场文书
2016公务员年度考核评语
2015/12/01 职场文书