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 处理表单元素的代码
Feb 15 Javascript
如何将一个String和多个String值进行比较思路分析
Apr 22 Javascript
Node.js中HTTP模块与事件模块详解
Nov 14 Javascript
jQuery实现的支持IE的html滑动条
Mar 16 Javascript
javascript实现支持移动设备画廊
Aug 24 Javascript
JS+Canvas 实现下雨下雪效果
May 18 Javascript
浅谈JS的基础类型与引用类型
Sep 13 Javascript
jQuery简单获取DIV和A标签元素位置的方法
Feb 07 Javascript
小程序scroll-view组件实现滚动的示例代码
Sep 20 Javascript
在vue 中使用 less的教程详解
Sep 26 Javascript
javascript实现点亮灯泡特效示例
Oct 15 Javascript
详解Vue的watch中的immediate与watch是什么意思
Dec 30 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安装攻略:常见问题解答(三)
2006/10/09 PHP
生成php程序的php代码
2008/04/07 PHP
php 数组的一个悲剧?
2011/05/11 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
Yii2框架BootStrap样式的深入理解
2016/11/07 PHP
启用OPCache提高PHP程序性能的方法
2019/03/21 PHP
深入理解JavaScript定时机制
2010/10/29 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
浅析Python中yield关键词的作用与用法
2016/11/29 Python
Python基础知识点 初识Python.md
2019/05/14 Python
关于Python-faker的函数效果一览
2019/11/28 Python
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
abstract class和interface有什么区别?
2012/01/03 面试题
工厂门卫岗位职责范本
2014/04/04 职场文书
应急处置方案
2014/06/16 职场文书
党员四风问题对照检查材料
2014/09/27 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
环境卫生整治简报
2015/07/20 职场文书
2015年城乡环境综合治理工作总结
2015/07/24 职场文书