异常处理概述
在代码的运行过程中,错误是不可避免的,总的来说,错误发生于两种情况:一是程序内部的 逻辑或者语法错误,二是运行环境或者用户输入中不可预知的数据造成的错误。对于前者,就称之为错误(error),可以通过调试程序来解决;而后一种则更 多的称之为异常(exception),顾名思义,就是超出常规,没有按程序设计的意愿来输入数据。当然,异常还会有许多种类型。

所以说,异常并不等价于错误,相反,有时还会利用异常来解决一些问题。JavaScript可以捕获一个异常并进行相应的处理,从而避免了浏览器向用户报错。

使用try-catch-finally处理异常
用户可以使用该结构处理可能发生异常的代码,如果发生异常,则由catch捕获并进行处理,其语法如下:

try{
        //要执行的代码
}
catch(e){

//处理异常的代码
}

finally{

//无论异常发生与否,都会执行的代码
}

通过异常处理,可以避免程序停止运行,从而具有了一定的自我修复能力。

在Ajax开发中,利用异常处理的一个典型应用就是创建XMLHttpRequest对象,不同浏览器创建它的方式是不一样的,为了使代码能够跨浏览器运行,就可以利用异常,一种方法不行,再用另一种方法,直到不发生异常为止,例如:

<script language="JavaScript" type="text/javascript">

<!—

var xmlhttp;

try{
       //尝试用IE浏览器的方式创建XMLHttpRequest对象
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){

try{

//尝试用非IE浏览器的方式常见XMLHttpRequest对象
            xmlhttp=new XMLHttpRequest();

}catch(e){}

}
//-->
</script>
通过这种方式,就可以跨浏览器创建XMLHttpRequest对象。注意,即使不在catch块内进行处理,catch标识及其参数e也是必须写的,否则会产生语法错误,而finnally则不是必须的。

使用throw语句抛出异常
在JavaScript中有其内部的异常机制,在遇到非法操作时能自动抛出异常。实际的开发中,随着程序的复杂,需要能自己实现异常,这可以通过throw语句来实现:

throw value;

其中value就是要抛出的异常变量,它可以是JavaScript中的任何一种类型。但在JavaScript内部的异常中,异常参数(即 catch(e)中的e)是一个名为error的对象,可以通过new Error(message)来创建这个对象,异常的描述被作为error对象的一个属性message,可以由构造函数传入,也可以之后赋值。通过这个 异常描述message,可以让程序获取异常的详细信息,从而自动处理。

下面的程序计算两个数据的和,如果参数不是数字,则抛出异常,代码如下:

<script language="JavaScript" type="text/javascript">

<!—

//函数默认要求参数为数字
function sum(a,b){

a=parseInt(a);

b=parseInt(b);

//如果a或b不能转换为数字则抛出一个异常对象

if(isNaN(a) || isNaN(b)){

throw new Error("arguments are not numbers");

}

return a+b;

}

try{

//错误的调用

var s=sum("c","d");

}catch(e){

//显示异常的详细信息

alert(e.message);

}
//-->
</script>

程序中使用字母作为参数传递给sum函数,是错误的,所以函数内抛出了一个异常对象,这个对象被catch语句获取,并使用alert语句显示了其详细信息。

注意:使用new Error(message)创建异常对象只是一种默认的习惯,也是内置异常的实现方式。这不是必需的,完全可以抛出任意数据类型的异常,例如一个整数,来作为异常的描述。只要在程序中抛出异常和捕获异常能匹配即可。

Error对象除了message属性以外,还有一些其他的属性,这些属性因浏览器而异,例如:在IE浏览器中,error对象的属性包括name、 number、description、message;而在Firefox浏览器中,error对象的属性包括message、fileName、 lineNumber、stack、name。在实际的应用中如果要实现自己的异常,这些属性只要被赋值,都是可用的,其中Firefox浏览器还会自动 对stack属性赋值,用于显示异常出现的位置。

转载于:https://www.cnblogs.com/wanghuaying/p/9522649.html

JavaScript异常处理相关推荐

  1. Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7...

    Atitit.js javascript异常处理机制与java异常的转换 多重catc hDWR 环境 .js exception process Vob7 1. 1. javascript异常处理机 ...

  2. JavaScript——异常处理

    JavaScript--异常处理 1. throw抛异常 异常处理是指预估代码执行过程中可能发生的错误,然后最大程度的避免错误的发生导致整个程序无法继续运行. function counter(x, ...

  3. JavaScript 异常处理

    异常处理概述在代码的运行过程中,错误是不可避免的,总的来说,错误发生于两种情况:一是程序内部的逻辑或者语法错误,二是运行环境或者用户输入中不可预知的数据造成的错误.对于前者,就称之为错误(error) ...

  4. JavaScript 异常处理及异常收集

    前言 这篇文章想要说明的是 JavaScript 异常的概念 JavaScript 异常的处理 JavaScript 异常的收集 JavaScript 异常的分析(后面再更新) 前端工程师都知道,Ja ...

  5. JavaScript -- throw、try 和 catch

    try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 很想java哦. <!DOCTYPE html> <html><head&g ...

  6. 如何捕获和分析 JavaScript Error

    前端工程师都知道 JavaScript 有基本的异常处理能力.我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常.但估计绝大多数前端工程师都没考虑过收集这些异常 ...

  7. Java和JavaScript之间的区别

    1.简介 我们将在本文中比较Java语言和JavaScript语言. JavaScript由Netscape开发. 它最初是用于客户端的脚本语言,后来又用作客户端和服务器脚本的语言. Java由Jam ...

  8. 前端工程师自检清单(JavaScript基础)

    知识体系来源于一名[合格]前端工程师的自检清单 winter在他的<重学前端>课程中提到: 到现在为止,前端工程师已经成为研发体系中的重要岗位之一.可是,与此相对的是,我发现极少或者几乎没 ...

  9. 5天速通JavaScript

    5天速通JavaScript 一,JavaScript是什么和作用? 二,JavaScript的组成与特点 二,JavaScript入门 三,JavaScript的注释 四,浏览器控制台的使用 五,基 ...

最新文章

  1. 小程序海外也能做吗?小程序海外主体公司开发的案例
  2. 工作报告总是写不好?表达不准确?试试这个写作方法
  3. LeetCode Ugly Number
  4. Java基础:类加载器
  5. 神策数据王灼洲:方法论 + 实践,全面解析数据采集方案,必看!
  6. java.awt.api_Java SE 11(18.9)中的API更新
  7. !DOCTYPE 标签是什么
  8. hadoop常见算法(持续更新)
  9. android menu width,如何更改Android PopupMenu宽度
  10. HDU - 6464 免费送气球(线段树二分)
  11. 视觉素材-10 个值得珍藏的高清桌面壁纸网站
  12. 森林笔记之Qt:消息对话框(消息盒子)
  13. iOS项目开发中的知识点与问题收集整理
  14. [USACO09OCT]谷仓里的回声Barn Echoes(hush、STL)
  15. WMS 系统出入库理解
  16. “数字炸弹“——练习Python基础知识的小游戏【文末源码地址】
  17. ESP32-Camera性能(简单)测试评估
  18. 智能电视看凤凰卫视,不用直播源
  19. 乐Phone征途、联想谋变和iAD可能
  20. Flink sql-clinet 查询报错

热门文章

  1. aspnet登录界面代码_SAP系统基础操作培训1-环境登录介绍
  2. html中%3c%3e括号,打开关闭大括号检查
  3. 鸿蒙正式版什么时候上线,终于来了!华为鸿蒙正式版6月2日上线,EMUI时代落幕...
  4. SQLi LABS Less 14 报错注入+布尔盲注
  5. Python使用nmap进行端口扫描
  6. JavaScript:单选钮的事件处理
  7. 浅析 Python 的类、继承和多态
  8. 代码协定(三)——假定和断言
  9. 素数和 mooc 翁恺
  10. python处理excel的方法有哪些_Python操作Excel简单方法