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 事件小结 表格区别
Aug 13 Javascript
event对象的方法 兼容多浏览器
Jun 27 Javascript
javascript Array对象基础知识小结
Nov 16 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
Jul 17 Javascript
使用text方法获取Html元素文本信息示例
Sep 01 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
Oct 26 Javascript
JS实现搜索框文字可删除功能
Dec 28 Javascript
bootstrap table 多选框分页保留示例代码
Mar 08 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
Mar 09 Javascript
微信小程序实现滚动消息通知
Feb 02 Javascript
vue将毫秒数转化为正常日期格式的实例
Sep 16 Javascript
JS实现鼠标移动拖尾
Dec 27 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
常用PHP框架功能对照表
2014/10/23 PHP
php函数与传递参数实例分析
2014/11/15 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
JS获取当前网页大小以及屏幕分辨率等
2014/09/05 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
详解Python爬虫的基本写法
2016/01/08 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
python实现简单遗传算法
2020/09/18 Python
python 实现超级玛丽游戏
2020/11/25 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
盛大二次面试题
2016/11/18 面试题
中职生自我鉴定范文
2013/10/03 职场文书
元旦晚会主持词开场白
2015/05/28 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
毕业酒会致辞
2015/07/29 职场文书
python内置进制转换函数的操作
2021/06/02 Python
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫