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 从if else 到 switch case 再到抽象
Jul 17 Javascript
js给table赋值的实例代码
Oct 13 Javascript
node.js连接MongoDB数据库的2种方法教程
May 17 Javascript
vue+vue-validator 表单验证功能的实现代码
Nov 13 Javascript
React组件中的this的具体使用
Feb 28 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
Apr 27 Javascript
解决vue中post方式提交数据后台无法接收的问题
Aug 11 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
Jan 17 Javascript
vue使用video插件vue-video-player的示例
Oct 03 Javascript
Ajax实现局部刷新的方法实例
Mar 31 Javascript
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
在线一元二次方程计算器实例(方程计算器在线计算)
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简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
PHP URL路由类实例
2013/11/12 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
JS实现图片预加载无需等待
2012/12/21 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
Javascript中setTimeOut和setInterval的定时器用法
2015/06/12 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
Python性能优化的20条建议
2014/10/25 Python
10款最好的Web开发的 Python 框架
2015/03/18 Python
编写简单的Python程序来判断文本的语种
2015/04/07 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
python 实现在shell窗口中编写print不向屏幕输出
2020/02/19 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
编辑找工作求职信范文
2013/12/16 职场文书
文秘专业个人求职信
2013/12/22 职场文书
毕业生个人投资创业计划书
2014/01/04 职场文书
八一建军节感言
2014/02/28 职场文书
群教个人对照检查材料
2014/08/20 职场文书
逃课检讨书
2015/01/26 职场文书
python 提取html文本的方法
2021/05/20 Python