首页 > js学习 > js基础知识 > javascript中错误的处理,类型,事件及抛出
2016
12-16

javascript中错误的处理,类型,事件及抛出

一、错误处理:良好的错误处理机制可以及时的提醒用户,知道发生了什么事。为此,必须理解在处理JavaScript错误的时候,都有哪些手段和工具可以利用。

1、try-catch语句:ECMA262第3版引入了try-catch语句,作为JavaScript中处理异常的一种标准方式。

try { //尝试着执行try包含的代码

window.abcdefg(); //不存在的方法

} catch (e) { //如果有错误,执行catch,e是异常对象

alert('发生错误啦,错误信息为:' + e); //直接打印调用toString()方法,IE不会调用toString()方法。

}

在e对象中,ECMA-262还规定了两个属性:message和name,分别打印出信息和名称。

IE提供了和message完全相同的description属性、还添加了number属性提示内部错误数量。

Firefox提供了fileName(文件名)、lineNumber(错误行号)和stack(栈跟踪信息)。

Safari添加了line(行号)、sourceId(内部错误代码)和sourceURL(内部错误URL)。

所以,要跨浏览器使用,那么最好只使用通用的message。

2、finally子句

finally语句作为try-catch的可选语句,不管是否发生异常处理,都会执行。并且不管try或是catch里包含return语句,也不会阻止finally执行

try {

window.abcdefg();

} catch (e) {

alert('发生错误啦,错误信息为:' + e.message);

return false;

} finally { //总是会被执行,即使前面运行了return语句

alert('我都会执行!');

}

finally的作用一般是为了防止出现异常后,无法往下再执行的备用。也就是说,如果有一些清理操作,那么出现异常后,就执行不到清理操作,那么可以把这些清理操作放到finally里即可。

二、错误类型:执行代码时可能会发生的错误有很多种。每种错误都有对应的错误类型,ECMA-262定义了7种错误类型:

1.Error

2.EvalError:全局函数eval()的使用方式与定义的不同时抛出,但实际上并不能产生这个错误,所以实际上碰到的可能性不大。

3.RangeError:范围错误,一般在数值超出相应范围时触发

4.ReferenceError:引用错误,通常访问不存在的变量产生这种错误

5.SyntaxError:语法错误,通常是语法错误导致的

6.TypeError:类型错误,通常是类型不匹配导致的

7.URIError:在使用encodeURI()和decodeURI()时,URI格式不正确,但URI的兼容性非常强,导致这种错误几乎见不到

其中,Error是基类型(其他六种类型的父类型),其他类型继承自它。Error类型很少见,一般由浏览器抛出的。这个基类型主要用于开发人员抛出自定义错误。

利用不同的错误类型,可以更加恰当的给出错误信息或处理。

try {

new 10;

} catch (e) {

if (e instanceof TypeError) { //如果是类型错误,那就执行这里

alert('发生了类型错误,错误信息为:' + e.message);

} else {

alert('发生了未知错误!');

}

}

在明明知道某个地方会产生错误,可以通过修改代码来解决的地方,是不适合用try-catch的。或者是那种不同浏览器兼容性错误导致错误的也不太适合,因为可以通过判断浏览器或者判断这款浏览器是否存在此属性和方法来解决。

三、抛出错误:其实就是显示一个错误信息,只不过,错误信息可以自定义,更加精确和具体。

try {

new 10;

} catch (e) {

if (e instanceof TypeError) {

throw new TypeError('实例化的类型导致错误!'); //直接中文解释错误信息

} else {

throw new Error('抛出未知错误!');

}

}

IE浏览器只支持Error抛出的错误,其他错误类型不支持。

四、错误事件

error事件是当某个DOM对象产生错误的时候触发。

addEvent(window, 'error', function () {

alert('发生错误啦!')

});

new 10; //写在后面

<img src="123.jpg" onerror="alert('图像加载错误!')" />

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。