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 浏览器判断 绑定事件 arguments 转换数组 数组遍历
Jul 06 Javascript
js实现页面转发功能示例代码
Aug 05 Javascript
javascript实现密码强度显示
Mar 18 Javascript
AngularJS中处理多个promise的方式
Feb 02 Javascript
jquery网页日历显示控件calendar3.1使用详解
Nov 24 Javascript
漂亮实用的页面loading(加载)封装代码
Feb 03 Javascript
使用JSON格式提交数据到服务端的实例代码
Apr 01 Javascript
使用JS判断移动端手机横竖屏状态
Jul 30 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
Aug 22 Javascript
cnpm加速Angular项目创建的方法
Sep 07 Javascript
layui实现数据表格table分页功能(ajax异步)
Jul 27 Javascript
微信小程序使用Vant Weapp组件库的方法步骤
Aug 01 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正则走开
2008/03/15 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
2016/03/21 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
php实现的二分查找算法示例
2017/06/20 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
jquery根据属性和index来查找属性值并操作
2014/07/25 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
javascript控制台详解
2015/06/25 Javascript
js 博客内容进度插件详解
2017/02/19 Javascript
JavaScript中的工厂函数(推荐)
2017/03/08 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
详谈AngularJs 控制器、数据绑定、作用域
2017/07/09 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
深入理解nodejs搭建静态服务器(实现命令行)
2019/02/05 NodeJs
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
python 网络编程常用代码段
2016/08/28 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
数控专业个人求职信范例
2013/11/29 职场文书
年终总结会议主持词
2014/03/17 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
初中家长评语大全
2014/12/26 职场文书
邮政营业员岗位职责
2015/04/14 职场文书
《比尾巴》教学反思
2016/02/24 职场文书