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中获取请求的URL参数[正则]
Dec 25 Javascript
基于jquery的button默认enter事件(回车事件)。
May 18 Javascript
js模拟滚动条(横向竖向)
Feb 22 Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 Javascript
jQuery实现form表单元素序列化为json对象的方法
Dec 09 Javascript
关于cookie的初识和运用(js和jq)
Apr 07 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
Aug 10 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
Jul 05 jQuery
mpvue中配置vuex并持久化到本地Storage图文教程解析
Mar 15 Javascript
webpack源码之loader机制详解
Apr 06 Javascript
微信小程序实现富文本图片宽度自适应的方法
Jan 20 Javascript
Vue Prop属性功能与用法实例详解
Feb 23 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中substr()与explode()函数用法分析
2014/11/24 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
php DES加密算法实例分析
2019/09/18 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
slice函数的用法 之不错的应用
2006/12/29 Javascript
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
详解nodejs 文本操作模块-fs模块(四)
2016/12/22 NodeJs
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
2018/08/13 Javascript
vue中监听返回键问题
2019/08/28 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
python fabric使用笔记
2015/05/09 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
python取余运算符知识点详解
2019/06/27 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
Python sys模块常用方法解析
2020/02/20 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
《童趣》教学反思
2014/02/19 职场文书
公休请假条
2014/04/11 职场文书
歌颂祖国的演讲稿
2014/05/04 职场文书
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python