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错误 ...
随机推荐
- ubuntu 字体 android stuido 汉字 显示 方块
Ubuntu 12.04 LTS 中安装 windows 字体 ubuntu 中的中文字体看着总觉的有点不爽,于是百度了下,这里记录下怎么在 ubuntu 12.04 中安装 windows 字体 ...
- PHP中数据库的连接
<?php //1.链接MySQL服务器 $conn = mysql_connect("localhost", "root" , 199452); //2 ...
- windows phone上下文菜单ContextMenu的使用示例
新建一个WP项目,命名为contextmenu,然后往界面拖入一个ListBox控件listBox1,接着切换到XAML代码界面设置其属性,代码如下 <ListBox Height=" ...
- Uva 1588 Kickdown
这道题思路并不难想,在做题过程中主要遇到的困难有: 因为没有仔细的考虑边界情况,没有分析全面,导致因=没有取到而得不出正确结果,浪费的大量时间. 今后在做这类题目时,一定要先进行一个比较全面的分析+模 ...
- linux资源监控命令详解
Linux统计/监控工具SAR详细介绍:要判断一个系统瓶颈问题,有时需要几个 sar 命令选项结合起来使用,例如: 怀疑CPU存在瓶颈,可用 sar -u 和 sar -q deng 等来查看 怀疑内 ...
- PopupWindow的简单使用
测试代码: package com.zzw.testpopuwindows; import android.app.Activity; import android.graphics.Color; i ...
- Java 第四天 Mysql
下载地址 http://dev.mysql.com/downloads/ 社区版是免费的 配置将zip 解压copy到本地,如:C:\mysql-5.6.15-winx64,复制配置文件my-def ...
- Python学习教程(learning Python)--2 Python简单函数设计
本节讨论Python程序设计时为何引入函数? 为何大家都反对用一堆堆的单个函数语句完成一项程序的设计任务呢? 用一条条的语句去完成某项程序设计时,冗长.不宜理解,不宜复用,而采用按功能模块划分成函数, ...
- 包(package) 与 导入(import) 语句剖析
A) 包(package):用于将完成不同功能的类分门别类,放在不同的目录下. B)命名规则:将公司域名翻转作为包名.例如www.vmaxtam.com域名,那么包名就是com.vmaxtam 每个字 ...
- RMAN 报:ORA-19504 ORA-27038
在itpub中看到下面的问题: oracle 10g备份脚本如下run{allocate channel d1 device type disk MAXPIECESIZE=100M;crosschec ...