详解JavaScript中的异常处理方法


Posted in Javascript onJune 16, 2015

 有三种类型的编程错误:(1)语法错误和(2)运行时错误(3)逻辑错误:
语法错误:

语法错误,也被称为解析错误,在编译时进行传统的编程语言,并出现在JavaScript解释时。

例如,下面一行将导致一个语法错误,因为它缺少一个右括号:

<script type="text/javascript">
<!--
window.print(;
//-->
</script>

当一个语法错误在JavaScript中出现,只有在同一个线程中包含的语法错误的影响,在其他线程的代码被执行;代码依赖于包含错误的代码不会被执行。
运行时错误:

执行(编译/解释后)在运行时错误,也被称为异常,会引发。

例如,下面一行将导致运行时错误,因为这里的语法是正确的,但在运行时它正试图调用非存在的方法:

<script type="text/javascript">
<!--
window.printme();
//-->
</script>

例外情况也影响到它们发生的线程,允许其他JavaScript线程继续正常执行。
逻辑错误:

逻辑错误可能是最困难的类型的错误跟踪。这些错误是不是一个语法或运行时错误的结果。相反,当发生一个错误的驱动脚本逻辑,你没有得到所期望的结果。

你可能无法抓到这些错误,因为这取决于程序是什么类型的逻辑是基于业务需求。
try...catch...finally 语句:

JavaScript的最新版本中添加的异常处理能力。JavaScript实现 try ... catch... finally结构以及抛出操作来处理异常。

你可以捕获程序员生成和运行时异常,但不能捕获JavaScript语法错误。

这里是 try...catch...finally 块语法:

<script type="text/javascript">
<!--
try {
  // Code to run
  [break;]
} catch ( e ) {
  // Code to run if an exception occurs
  [break;]
}[ finally {
  // Code that is always executed regardless of 
  // an exception occurring
}]
//-->
</script>

try块必须后跟只有一个catch块或者一个finally块(或两者之一)。当一个异常在try块时,除被放置在e和catch块被执行。 try/catch语句后的可选finally块无条件地执行。
示例:

下面是一个例子,我们正试图调用一个不存在的函数,这将引发异常。让我们来看看它的行为,不具有try ... catch:

<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
  var a = 100;

  alert("Value of variable a is : " + a );
 
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>

现在,让我们尝试使用 try ... catch 捕获这个异常,并显示一个用户友好的消息。也可以取消此消息,如果要隐藏从用户这个错误。

<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
  var a = 100;
  
  try {
   alert("Value of variable a is : " + a );
  } catch ( e ) {
   alert("Error: " + e.description );
  }
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>

可以使用finally块将永远try/catch语句后,无条件地执行。下面是一个例子:

<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
  var a = 100;
  
  try {
   alert("Value of variable a is : " + a );
  }catch ( e ) {
   alert("Error: " + e.description );
  }finally {
   alert("Finally block will always execute!" );
  }
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>

throw 语句:

可以使用throw语句来提高你的内置异常或自定义异常。后来这些异常可以被捕获并可以采取适当的行动。

以下是表示throw语句的用法的例子。

<html>
<head>
<script type="text/javascript">
<!--
function myFunc()
{
  var a = 100;
  var b = 0;
  
  try{
   if ( b == 0 ){
     throw( "Divide by zero error." ); 
   }else{
     var c = a / b;
   }
  }catch ( e ) {
   alert("Error: " + e );
  }
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>

您可以使用字符串,整数,布尔或对象在一个函数抛出一个异常,那么可以捕捉例外在相同的函数,我们在上面做了,或者使用try ... catch块在其他的函数。
onerror() 语法

onerror事件处理程序是第一个特点,方便JavaScript处理错误。错误事件被触发窗口对象,每当一个异常页面上出现。例如:

<html>
<head>
<script type="text/javascript">
<!--
window.onerror = function () {
  alert("An error occurred.");
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>

onerror事件处理程序提供了三条信息,以找出错误的确切性质:

  1.     错误消息 . 浏览器将显示给定的错误相同的消息
  2.     URL . 在发生错误的文件
  3.     行号. 在导致错误的URL给出的行号

这里是例子来说明如何提取此信息

<html>
<head>
<script type="text/javascript">
<!--
window.onerror = function (msg, url, line) {
  alert("Message : " + msg );
  alert("url : " + url );
  alert("Line number : " + line );
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="myFunc();" />
</form>
</body>
</html>

可以显示在任何方式,你觉得这是更好的提取信息。

可以使用onError方法来显示错误消息的情况下没有在如下加载图像的任何问题:

<img src="myimage.gif"
  onerror="alert('An error occurred loading the image.')" />

可以使用的onerror许多HTML标记错误的情况下显示相应的信息。

Javascript 相关文章推荐
jQuery cdn使用介绍
May 08 Javascript
js获取select默认选中的Option并不是当前选中值
May 07 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
Aug 23 Javascript
微信小程序 教程之wxapp 视图容器 view
Oct 19 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
Nov 18 Javascript
使用Bootstrap美化按钮实例代码(demo)
Feb 03 Javascript
JS去除字符串中空格的方法
Feb 14 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
Jul 18 Javascript
vue页面跳转后返回原页面初始位置方法
Feb 11 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
Aug 27 jQuery
mustache.js实现首页元件动态渲染的示例代码
Dec 28 Javascript
详解JavaScript对W3C DOM模版的支持情况
Jun 16 #Javascript
jQuery插件zepto.js简单实现tab切换
Jun 16 #Javascript
jQuery封装的tab选项卡插件分享
Jun 16 #Javascript
jquery插件splitScren实现页面分屏切换模板特效
Jun 16 #Javascript
简述JavaScript对传统文档对象模型的支持
Jun 16 #Javascript
纯javascript实现四方向文本无缝滚动效果
Jun 16 #Javascript
Bootstrap基础学习
Jun 16 #Javascript
You might like
php array_flip() 删除数组重复元素
2009/01/14 PHP
PHP 木马攻击防御技巧
2009/06/13 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
Js通过AES加密后PHP用Openssl解密的方法
2019/07/12 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
Python常见字典内建函数用法示例
2018/05/14 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
Python timer定时器两种常用方法解析
2020/01/20 Python
pytorch ImageFolder的覆写实例
2020/02/20 Python
如何表示python中的相对路径
2020/07/08 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
护士自我鉴定总结
2014/03/24 职场文书
竞选生活委员演讲稿
2014/04/28 职场文书
八年级英语教学计划
2015/01/23 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
获奖感言范文
2015/07/31 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS