try...catch...finally

javascript一旦出现了异常,如果没有进行异常捕获处理的话,代码就停止在出现异常的地方不会继续往下运行了, 如果进行了异常的捕获处理,javascript代码在运行到有捕获异常的代码时,就算代码出错了,也会继续往下运行代码,不会停止。 我们可以在捕获到异常时做相应的设置或者提示用户,这样的用户体验会比较好。

javascript中也有异常处理,而且与Java中的一模一样。

1.1、捕获异常

捕获异常使用try...catch...finally语句。 其中finally语句可有可无,finally语句是无论会不会抛出异常,最终都会执行的。

try...catch...finally语句的形式如下:

try {
	//语句
} catch(e) {
	//语句
} finally {
	//语句
}

出现异常时候,会抛出一个e对象,它是Error对象的实例。

示例:

var x = 0;
try {
	x = 5 / x;
	x = 5 + x;
} catch(e) {
	console.log('所在的行:' + e.lineNumber + ',异常信息:' + e.message + ',异常名称:' + e.name);
} finally {
	console.log('finally');
}

console.log('after finally');
1.2、抛出异常

javascript不仅允许我们捕获异常,还可以让我们抛出异常。抛出异常同Java中的一样,使用throw关键字。

与Java中稍微不同的是:在Java中,当throw关键字不在try块中的时候,必须在方法声明中使用throws关键字进行声明。 而javascript中压根就没有throws关键字,所以在javascriptthrow关键字可使用在任何地方。

throw关键字的使用格式:

throw errorInstance;

errorInstance可以是任意类型的,但通常是Error对象的实例。

示例1:

try {
	throw new Date();
} catch(e) {//这里的e对象就是Date的实例,而不是Error的实例了
	document.write(e.toLocaleString());
} finally {
	console.log('finally');
}

示例2:

function xxoo() {
    throw new Error('爽死了!');
}

try {
	xxoo();
} catch(e) {
	document.write('所在的行:' + e.lineNumber + ',异常信息:' + e.message + ',异常名称:' + e.name);
} finally {
	console.log('finally');
}