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 new Date() 出现NaN 的分析
Oct 23 Javascript
表单的焦点顺序tabindex和对应enter键提交
Jan 04 Javascript
JavaScript建立一个语法高亮输入框实现思路
Feb 26 Javascript
js设置function参数默认值(适合没有传参情况)
Feb 24 Javascript
js操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
jQuery中的ajax async同步和异步详解
Sep 29 Javascript
原生js实现鼠标跟随效果
Feb 28 Javascript
将 vue 生成的 js 上传到七牛的实例
Jul 28 Javascript
vue父组件点击触发子组件事件的实例讲解
Feb 08 Javascript
在Angular中使用JWT认证方法示例
Sep 10 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
vue制作toast组件npm包示例代码
Oct 29 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的输入输出流
2007/02/14 PHP
php 删除cookie方法详解
2014/12/01 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
PHP编程中尝试程序并发的几种方式总结
2016/03/21 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
php框架知识点的整理和补充
2021/03/01 PHP
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
详解jQuery中的事件
2016/12/14 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
file-loader打包图片文件时路径错误输出为[object-module]的解决方法
2020/01/03 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
python模块restful使用方法实例
2013/12/10 Python
老生常谈Python startswith()函数与endswith函数
2017/09/08 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
小区门卫岗位职责
2013/12/31 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
慰问信模板
2015/02/14 职场文书