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 相关文章推荐
js 跨域和ajax 跨域问题小结
Jul 01 Javascript
MooBox 基于Mootools的对话框插件
Jan 20 Javascript
JQuery遍历DOM节点的方法
Jun 11 Javascript
JS实现的另类手风琴效果网页内容切换代码
Sep 08 Javascript
深入剖析JavaScript编程中的对象概念
Oct 21 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
Dec 04 Javascript
Javascript操作dom对象之select全面解析
Apr 24 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 Javascript
AngularJS创建一个上传照片的指令实例代码
Feb 24 Javascript
基于express中路由规则及获取请求参数的方法
Mar 12 Javascript
vuex state及mapState的基础用法详解
Apr 19 Javascript
JavaScript链式调用原理与实现方法详解
May 16 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实现的一个简单json rpc框架实例
2015/03/30 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
PHP重置数组为连续数字索引的几种方式总结
2018/03/12 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
Python栈类实例分析
2015/06/15 Python
Python科学计算之Pandas详解
2017/01/15 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
python中turtle库的简单使用教程
2020/11/11 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
linux系统都有哪些运行级别
2012/04/15 面试题
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
致跳远、跳高运动员广播稿
2014/01/09 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
大学辅导员述职报告
2015/01/10 职场文书
齐云山导游词
2015/02/06 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python