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 相关文章推荐
JavaScript中使用构造函数实现继承的代码
Aug 12 Javascript
JS 日期比较大小的简单实例
Jan 13 Javascript
php中给js数组赋值方法
Mar 10 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
Apr 11 Javascript
Bootstrap carousel轮转图的使用实例详解
May 17 Javascript
TypeScript入门-基本数据类型
Mar 28 Javascript
解决vue中对象属性改变视图不更新的问题
Feb 23 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
Apr 25 Javascript
JavaScript中this的全面解析及常见实例
May 14 Javascript
如何在微信小程序中存setStorage
Dec 13 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
Mar 04 Javascript
js通过canvas生成图片缩略图
Oct 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
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
python实现dict版图遍历示例
2014/02/19 Python
python3编写C/S网络程序实例教程
2014/08/25 Python
python获取从命令行输入数字的方法
2015/04/29 Python
Ubuntu下安装PyV8
2016/03/13 Python
Python中functools模块的常用函数解析
2016/06/30 Python
python 中random模块的常用方法总结
2017/07/08 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
Python中Selenium库使用教程详解
2020/07/23 Python
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
专升本个人自我评价
2013/12/22 职场文书
新文化运动的基本口号
2014/06/21 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
党员评议个人总结
2014/10/20 职场文书
小人国观后感
2015/06/11 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
uni-app 微信小程序授权登录的实现步骤
2022/02/18 Javascript