javascript编程异常处理实例小结


Posted in Javascript onNovember 30, 2015

本文实例总结了javascript编程异常处理的方法。分享给大家供大家参考,具体如下:

前言:在前一篇《asp.net开发中常见公共捕获异常方式总结》,我们整理总结了asp.net服务端的异常处理。这一篇接着前文,简单总结并讨论一下javascript在客户端的异常处理。这样asp.net的服务端和客户端异常处理我们就都有了初步的认识。

1、烦人的脚本错误

楼猪经常装13,但是普遍都没有深度。偶然艰难地看懂了一段英文,终于可以深沉地再装一回:

When browsing Web pages on the internet, we all have seen a JavaScript alert box telling us there is a runtime error and asking "Do you wish to debug?". Error message like this may be useful for developers but not for users. When users see errors, they often leave the Web page.

上面这段话,哼哼,看不懂了吧?nc楼猪优雅且粗暴地理解一下就是,打开一个网页,我们都不时碰到过网页弹出脚步错误并询问“是否要调试?”这种sb问题。烦不烦啊,正常用户经常都会习惯性选择右上红叉,但是这种提示信息可能对开发人员就tmd很有用。由此可见,我kao,开发人员不正常?!看来楼猪理解有误。其实您不难看出,原文要告诉我们的最终意图应该是,网页里出现脚本错误很要命,用户体验不好,白白“吓跑”一批潜在用户。

2、如何处理脚本错误

在js中,我们通常也是通过try...catch 来捕获并处理异常。

try
{
 //Run some code here
}
catch(e)
{
 //Handle errors here
}

在实际代码中,我们可能会这么写:

function test(){
var txt="";
try{
  alert(aaa);//aaa是未声明的变量
}
catch(e){
  txt="There was an error on this page.\n\n";
  txt+="Error message: " + e.message + "\n\n";
  txt+="Error description: " + e.description + "\n\n";
  txt+="Error name: " + e.name + "\n\n";
  //alert(txt);//正式平台上可能需要注释掉该行
  }
}

还有一种比较通用的做法就是,给window对象的onerror事件注册通用处理方法,并将下面的代码置于页面的<head></head>节内:

window.onerror=function(){
  return true;
}

上面这种方式的好处是页面里写一次,就不会弹出恼人的脚本错误,有点全局处理的意思。对于开发人员,这种写法可能会隐藏潜在的脚本错误而不被发现,所以测试的时候需要注释掉上面的函数。

3、javascript里的Error

(1)、Error对象的常用属性

在我们捕获异常的时候,通常都会在catch处抛出一个Error对象的实例e,e的几个常用属性如下:

属性                             说明
description                      异常的描述信息
message                          异常的描述信息
name                             异常类型
number                           独有的异常代号

在实际开发中,通常都会提示给开发人员message和name信息,以便有针对性地处理异常。

(2)、Error对象的类型

通过(1)中的name属性我们可以查看到异常类型。在js中,有如下几种常见异常类型:

TypeError      : 当遇到一个意外的类型时引发,比如未声明的变量等;
SyntaxError    : 在解析js代码时其中的语法错误引发,比如服务端注册脚步,少一个括号或引号等;
ReferenceError : 使用一个无效的引用时引发该异常;
EvalError      : 在错误的调用eval函数时引发;
RangeError     : 在一个数字型变量的值超出了其范围时引发;
URIError       :  错误地使用encodeURI()或decodeURI()函数时引发。

在实际的开发中,针对不同类型的异常作出不同的异常处理,有利于我们有效地发现问题和提高用户体验。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
细品javascript 寻址,闭包,对象模型和相关问题
Apr 27 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
Sep 05 Javascript
node.js中的require使用详解
Dec 15 Javascript
详解JavaScript中的every()方法
Jun 08 Javascript
jQuery实现类似淘宝网图片放大效果的方法
Jul 08 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
js实现千分符和保留几位小数的简单实例
Aug 01 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
vue-cli3配置与跨域处理方法
Aug 17 Javascript
使用vue制作滑动标签
Sep 21 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
Oct 25 Javascript
JS算法教程之字符串去重与字符串反转
Dec 15 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
Nov 30 #Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
Nov 30 #Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
Nov 30 #Javascript
基于javascript如何传递特殊字符
Nov 30 #Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
Nov 30 #Javascript
全面解析Bootstrap排版使用方法(文字样式)
Nov 30 #Javascript
javascript中eval和with用法实例总结
Nov 30 #Javascript
You might like
实现树状结构的两种方法
2006/10/09 PHP
smarty section简介与用法分析
2008/10/03 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
js实现网页收藏功能
2015/12/17 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
python实现简易内存监控
2018/06/21 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
简单了解django orm中介模型
2019/07/30 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
MySQL面试题
2014/01/12 面试题
陈欧广告词
2014/03/14 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
罚站检讨书
2015/01/29 职场文书
医院保洁员管理制度
2015/08/05 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
python3中apply函数和lambda函数的使用详解
2022/02/28 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python