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 相关文章推荐
取选中的radio的值
Jan 11 Javascript
JavaScript输入邮箱自动提示实例代码
Jan 13 Javascript
jquery显示隐藏input对象
Jul 21 Javascript
Jquery元素追加和删除的实现方法
May 24 Javascript
jQuery购物网页经典制作案例
Aug 19 Javascript
微信小程序 弹窗自定义实例代码
Mar 08 Javascript
AngularJS中controller控制器继承的使用方法
Nov 03 Javascript
基于vue2.0实现简单轮播图
Nov 27 Javascript
vue2中使用less简易教程
Mar 27 Javascript
深入理解 JS 垃圾回收
Jun 03 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
May 18 Javascript
小程序wx.getUserProfile接口的具体使用
Jun 02 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
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
传智播客学习之java 反射
2009/11/22 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
jQuery插件jPaginate实现无刷新分页
2015/05/04 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
javascript 闭包详解
2015/07/02 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
对Python _取log的几种方式小结
2019/07/25 Python
django基于restframework的CBV封装详解
2019/08/08 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
网络信息管理员岗位职责
2014/01/05 职场文书
银行职员自我鉴定
2014/04/20 职场文书
班主任评语大全
2014/04/26 职场文书
仓库管理计划书
2014/05/04 职场文书
初中学校军训方案
2014/05/09 职场文书
技校毕业生自荐书
2014/05/23 职场文书
工程部文员岗位职责
2015/02/04 职场文书
升职自荐信怎么写
2015/03/05 职场文书
关于运动会的广播稿
2015/08/19 职场文书
Python如何加载模型并查看网络
2022/07/15 Python