JS中的异常处理方法分享

 更新时间:2013年12月22日 23:59:02   作者:  
我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法

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函数分享

    这里给大家推荐一个自己封装的常用的javascript函数,基本上常见的操作都包含在内了,有需要的小伙伴直接拿走使用吧。
    2015-01-01
  • 微信sdk实现禁止微信分享(使用原生php实现)

    微信sdk实现禁止微信分享(使用原生php实现)

    这篇文章主要介绍了微信sdk实现禁止微信分享(使用原生php实现),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • JS常用跨域方法实现原理解析

    JS常用跨域方法实现原理解析

    这篇文章主要介绍了JS常用跨域方法实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • javascript中Date()函数在各浏览器中的显示效果

    javascript中Date()函数在各浏览器中的显示效果

    本文给大家分享的是javascript中Date()函数在各浏览器中的显示效果,由于各大浏览器的兼容性问题,本文做了这个测试,希望有需要的小伙伴可以少走些弯路
    2015-06-06
  • JavaScript对数组进行随机重排的方法

    JavaScript对数组进行随机重排的方法

    这篇文章主要介绍了JavaScript对数组进行随机重排的方法,实例分析了javascript实现数组随机重新排序的两种实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • js发送短信倒计时的简单实现方法

    js发送短信倒计时的简单实现方法

    下面小编就为大家带来一篇js发送短信倒计时的简单实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • JavaScript和Vue分别实现逐字弹出(打字机)效果

    JavaScript和Vue分别实现逐字弹出(打字机)效果

    这篇文章主要为大家详细介绍了如何通过CSS、JavaScript和Vue分别实现逐字弹出(打字机)效果,文中的示例代码讲解详细,需要的小伙伴可以参考一下
    2024-01-01
  • 利用PHP实现递归删除链表元素的方法示例

    利用PHP实现递归删除链表元素的方法示例

    这篇文章主要给大家介绍了关于如何利用PHP实现递归删除链表元素的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)

    js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)

    JS的语法非常灵活,简单的对象创建就有好几种不同的方法。这些过于灵活的地方有时候确实很让人迷惑,那么今天我们就来梳理一下JS中常用的创建对象的几种方法吧
    2015-11-11
  • js实现弹框效果

    js实现弹框效果

    这篇文章主要为大家详细介绍了js实现弹框效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03

最新评论