JavaScript 异常
转载自:http://www.cnblogs.com/aqbyygyyga/archive/2011/10/29/2228824.html(排版格式修改了一下)
一、错误处理的重要性
以前,javascript总是因为会出现奇怪的令人困惑的错误消息而知名,调试这种信息确实是一种痛苦的经历。因此,第四版的浏览器(IE4.0和Netscape4.0)包含了一些基本的错误处理功能。不久之后,ECMA和ECMASCript第三版中提出新的解决方案。最新的ECMAScript添加了异常处理机制,采用了从Java中移植过来的模型,第三版用ECMAScript第二版中的一些保留字实现了try…catch..finally结构以及throw操作符。
二、早期浏览器的错误处理
早期的浏览器(如IE3.0)没有错误处理。函数通过返回一个无效值(一般是null、false或-1,根据不同的函数不同)来表示发生了错误,考虑以下代码:
var index = findColor(colorarray,”red”);
If (index==-1){
alert(“该项不存在”);
}
else{
alert(“该项的位置是:”+index);
}
以上的问题在于函数findcolor的返回值-1无从判断是没有找到还是出错了。
错误和错误处理将帮助我们解决这个问题,在javascript引入错误处理后,web开发人员就可以更好的对代码进行控制了。好的错误处理技术可以让脚本的开发、测试和部署更流畅。Js尤为如此,因为它缺乏标准的开发环境来指导开发人员。
三、错误和异常
错误的类型无外两种:语法错误和运行时错误
1、语法错误
传统编程语言编译时解析错误,在javascript中发生在解释时。这些错误是由代码中的意外字符直接造成的。然后就不能完全编译/解释了,如:
window.alert(“test”
不过,在javascript中,只有在同一线程中的代码会受到错误代码的影响。在其他线程中的代码和其他外部引用的文件中的代码,如果不依赖于包含错误的代码,则可以继 续执行,如:
<head>
<script type="text/javascript">
function handlerLoad() {
windows.open(“about:blank”);
}
function handleClick(){
alert(“click”);
}
</script>
</head>
<body onload =“handlerLoad()”>
<input type=“button” value=“test” onclick=“handlerClick()”/>
</body>
这段JS代码,页面载入时会报JS错误,但不会影响handleClick的执行。
四、处理错误
Javascript提供了两种特殊的错误处理方式。BOM包含一个onerror事件处理函数,这个window对象与图像对象上都有,同时ECMAScript定义了另一个从java中借鉴过来的try…catch结构来处理异常。
1、onerror事件处理函数
<SCRIPT LANGUAGE="JavaScript"> <!-- function handleError(){ alert("出错了"); return true; } window.onerror = handleError; //屏蔽所有的错误提示,很危险 //--> </SCRIPT> </HEAD> <BODY onload="handleLoad()"> </BODY> </HTML>
这样,网页出错,便会弹出”出错了“消息框”,但不幸的是网页仍会弹出错误提示框,如果想去掉这个提示框,改造如下:
function handleError()
{
alert("出错了");
return true;
}
2、取出错误信息
onerror事件处理函数提供了三种信息来确定错误确切的性质
1)错误信息—对于给定错误,浏览器会显示同样的信息
2)URL – 在哪个文件中发生了错误
3)行号 – 给定URL中发生的错误的行号
如:
<SCRIPT LANGUAGE="JavaScript"> <!-- function handleError(sMessage,sURL,sLine) { alert(“出错了.\n”+“消息:"+sMessage+"\nURL:"+sURL+ "\n出错行号:"+sLine); return true; } window.onerror = handleError; //--> </SCRIPT> //定制我们的错误提示
3、图像载入错误
<img src=“blue.gif” onerror=“alert(‘载入图像出错’)”/>
和window.onerror不同,img的onerror事件处理函数无任何额外消息的参数。图片没正常加载就会触发onerror事件,使用onerror事件处理函数的主要问题是,它是BOM 的一部分,所以,没有任何的标准能控制它们的行为。因此任何的浏览器使用这个事件处理函数处理错误的方式也明显不同。
如:IE中发生error事件时,正常的代码会继续执行;所有的变量和数据会保留下来,并可通过onerror事件处理函数访问。然而在mozilla中,正常的代码执行都会结束,同 时所有错误处理之前的变量和数据都会被销毁。
还有其浏览器根本不支持window对象上的onerror事件处理函数,但它们都支持图像上的onerror事件
4、try…catch语句
ECMAScript第三版支持try…catch…finally语法,基本语法:
try{
//code
}catch([exception]){
//code
}[finally{
//code
}]
如:
<SCRIPT LANGUAGE="JavaScript">
<!--
try{
alert("ok");
}catch(exception){
alert("an error processed");
}finally{
alert("finally");
}
alert("ok");
//-->
</SCRIPT>
注意:与java语言不同的是:不支持多重catch语句,但支持嵌套catch语句,如:
try{
var a = document.getElementById("txtUser");
alert(a.value);
}catch(ex) {
alert(“Error”);
}
再如: 弹出详细错误信息
try{
var a = document.getElementById("txtUser");
alert(a.value);
}catch(ex) {
alert(ex.message); //error
}
try{
var a = document.getElementById("txtUser");
alert(a.value);
}catch(ex){
try{
alert(oException.message);
}
catch (ex){
alert(ex.message);
}
}
}
五、Error对象
类似于java的错误基类Exception,javascript有个基类Error,Error对象有以下特征:
1)name –表示错误类型的字符串
2)message – 实际的错误信息
Error对象的名称对应于它的类,可以是以下值之一
1)EvalError: 错误发生在eval()函数中
2)RangeError:数字的值超过javascript可表示的范围
3)ReferenceError: 使用了非法的引用
4)SyntaxError: 在eval()函数调用中发生了语法错误。
5)TypeError:变量的类型不是预期所需的
6)URIError: 在encodeURI()或者decodeURI()函数中发生的错误
说明:Mozzilla和IE均扩展了Error对象,如IE中提供了一个number特性来表示错误代号,也可用description代替message
六、错误类型判断 二种方法
方法1:通过name属性判断
方法2: 通过instanceof操作符
如:
try{
var scriptStr ="
var a=0;
var b=1;
var c=a++b;
alert(c)
";
eval(scriptStr);
}catch(ex){
if (ex instanceof SyntaxError){
alert("语法出错了");
}
}
七、抛出异常
ECMASCript还引入throw语句,用于有目的的抛出异常,语法如下:
throw error_object
error_object可以是字符串、数字、布尔值或是实际的对象。如:
throw “an error occurred”;
throw 5007;throw true;
throw new Object();
throw new Error();
throw new Error(“error”);
throw new Error(10001,”error”);
JavaScript 异常的更多相关文章
- JavaScript异常捕获
理论准备 ★ 异常捕获 △ 异常:当JavaScript引擎执行JavaScript代码时,发生了错误,导致程序停止运行: △ 异常抛出:当异常产生,并且这个异常生成一个错误信息: △ 异常捕获: ...
- 处理JavaScript异常的正确姿势
译者按: 错误是无法避免的,妥善处理它才是最重要的! 原文: A Guide to Proper Error Handling in JavaScript Related Topics: 译者: Fu ...
- [六字真言]5.咪.功力不足,学习前端JavaScript异常
A Guide to Proper Error Handling in JavaScript 这是关于JavaScript中异常处理的故事.如果你相信 墨菲定律 ,那么任何事情都可能出错,不,一定会出 ...
- javascript 异常基本语法
http://www.w3school.com.cn/js/js_onerror.asp try...catch 的作用是测试代码中的错误. JavaScript - 捕获错误 当我们在网上冲浪时 ...
- JavaScript 异常 Exceptions
JavaScript提供了一套异常处理机制. 异常是干扰程序的正常流程的不寻常(但并非完全是出乎意料的)的事故. 当发现这样的事故时,你的程序应该抛出一个异常. throw语句中断函数的执行. 它应该 ...
- 松软科技Web课堂:JavaScript 异常
JavaScript 错误 - Throw 和 Try to Catch try 语句使您能够测试代码块中的错误. catch 语句允许您处理错误. throw 语句允许您创建自定义错误. final ...
- ArcGIS Javascript 异常之No 'Access-Control-Allow-Origin' header
本文只描述现象与处理措施,不讨论原理. 开发过程中遇到此异常,查询后网上说是跨域访问的问题,给出的解决方案是通过JQuery的跨域访问机制来解决, 难道我需要直接找ArcGISTiledMapServ ...
- javascript异常cannot read property xx of null 的错误
一般报这种异常或者错误,是因为试图从null中再读一个属性导致的. 比如:var myAttr=myObj.data.Name; 假如这个时候myObj.data是null,那么再试图读取data的N ...
- 4 JavaScript异常&debugger&保留关键字
try:语句测试代码块错误 catch:语句处理错误,一般提供一个对象如catch(err)用来存储错误信息 throw: 语句创建自定义错误,抛出的信息可以被catch捕获 JavaScript错误 ...
随机推荐
- kickstart简介 20140707
kickstart是红帽发行版中的一种安装方式,它通过以配置文件的方式来记录linux系统安装是的各项参数和想要安装的软件.只要配置正确, 整个安装过程中无需人工交互参与,达到无人值守安装的目的,因而 ...
- RECT 数据结构
数据结构RECT定义了一个矩形的左上角和右下角的坐标 ? 1 2 3 4 5 6 7 8 typedef struct _RECT{ LONG left; LONG t ...
- CSS3新增伪类
p:last-of-type 选择其父元素的最后的一个P元素 p:last-child 选择其父元素的最后子元素(一定是P才行) p:first-of-type ...
- 为什么swing不适合做桌面软件
http://www.zhihu.com/question/19608871 我最近几年做的项目清一色的都是HTML5了,这篇<基于HTML5的电信网管3D机房监控应用>供参考,HTML5 ...
- CentOS 6.4安装AMH面板
复制以下代码 然后执行 或者下载wget http://amysql.com/file/AMH/3.2/amh.sh; chmod 775 amh.sh; ./amh.sh 2>&1 | ...
- ASP.NET状态保持:ViewState
ViewState是ASP.NET的.aspx页面特有的,是页面级的状态保持.一般用在内网系统和网站后台. namespace WebFormTest.TestCollect { public par ...
- SQL SERVER 2008 R2 还原数据库3154错误
1.SQL SERVER 2008 在还原数据库时,会报错. 提示错误:"备份集中的数据库备份与现有的 '***' 数据库不同.RESTORE DATABASE 正在异常终止. (Micro ...
- 三、MongoDB的创建、更新和删除
一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 概要 下面开始学习MongoDB最重要也是最基础的部分:C(创建)R(查询)U(更新)D( ...
- php对mysql简单读取的实例
读取mysql数据库 例. <?php $link=mysql_connect("localhost","root","之前的管理员密码& ...
- 最新hosts,更新hosts,可用
点击这里,全选后复制,粘贴到C:\Windows\System32\drivers\etc的hosts里面,把原来的置换了