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 相关文章推荐
IE 条件注释详解总结(附实例代码)
Aug 29 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
Jun 18 Javascript
JS前端框架关于重构的失败经验分享
Mar 17 Javascript
javascript的渐进增强与平稳退化浅谈
Nov 12 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
Mar 05 Javascript
JavaScript中的条件判断语句使用详解
Jun 03 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
Aug 17 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 Javascript
jQuery实现立体式数字滚动条增加效果
Dec 21 Javascript
jquery 判断是否支持Placeholder属性的方法
Feb 07 Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
在axios中使用params传参的时候传入数组的方法
Sep 25 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
教你如何使用php session
2013/10/28 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
写一个移动端惯性滑动&amp;回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
浅谈Vue 性能优化之深挖数组
2018/12/11 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
python处理cookie详解
2014/02/07 Python
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
基于 HTML5 WebGL 实现的医疗物流系统
2019/10/08 HTML / CSS
医护人员英文求职信范文
2013/11/26 职场文书
教育课题研究自我鉴定范文
2013/12/28 职场文书
车队司机自我鉴定
2014/03/02 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
2016年元旦主持词
2015/07/06 职场文书
Python创建SQL数据库流程逐步讲解
2022/09/23 Python