日期:2014-05-16  浏览次数:20412 次

javascript错误处理(2)

try...catch 语句.

?1. nested try...catch语句.

??? 使用场景: 在try...catch语句中的catch子句中,也会发生错误,此时,就可以使用嵌套try...catch语句。

?eg:

<script type="text/javascript">
    	try{
    		eval("a ++ b");
    	}catch(oException){
    		alert("An Exception occurred.");
    		try{
	    		var aErrors = new Arrary(100000000000000000000000);
	    		aErrors.push(exception);
	    	}catch(oException2){
	    		alert("Another exception occurred.");
	    	}
    	}finally{
    		alert("all done!");	
    	}   		
</script>

?

Error 对象

类似于java有个可用于抛出的基类Exception, javascript有个Error基类用于抛出, Error有以下特性:

name----表示错误类型的字符串

message----实际的错误信息

eg:

<script type="text/javascript">
	try{
		window.nonExistenFunction();
		alert("Method completed!");
	}catch(oException){
		alert("An exception occurred: "+oException.message);
	}finally{
		alert("End of try...catch test.");
	}		
</script>

?

判断错误类型

尽管每个try...catch语句只能有一个catch子句,但判断抛出的错误的类型的方法却有几种。

第一种方法是使用Error对象的name特性

eg:

	try{
		eval("a ++ b");
	}catch(oError){
		if(oError.name=='SyntaxError'){
			alert("Syntax Error: "+oError.message);
		}else{
			alert("An unexception error occurred: " + oError.message);
		}
	}

?

第二种方法是使用instanceof操作符,并使用不同错误的类名

eg:

	try{
		eval("a ++ b");
	}catch(oError){
		if(oError instanceof SyntaxError){
			alert("Syntax Error: "+oError.message);
		}else{
			alert("An unexception error occurred: " + oError.message);
		}
	}

?

?

抛出异常

ECMAScript 第三版还引入了throw语句,用于有目的地抛出异常:throw error_object;

error_object 可以是字符串,数字,布尔值或者是实际对象,也可抛出一个Error对象。

实际的说,正常的执行不能继续时,应该抛出一个异常

eg:

	function addTwoNumbers(a,b){
		if(arguments.length < 2){
			throw new Error("Two numbers are required.");
		}else{
			return a+b;
		}
	}
	
	try{
		result = 	addTwoNumbers(90);
	}catch(oError){
		alert(oError.message);
	}

?

web browser不生成Error对象(它总生成一个较精确的Error对象),所以使用前面的技术就可以区分web browser抛出的错误和开发人员抛出的错误

eg:

	function addTwoNumbers(a,b){
		if(arguments.length < 2){
			throw new Error("Two numbers are required.");
		}else{
			return a+b;
		}
	}
	
	try{
		result = 	addTwoNumbers(90,parseInt(z));
	}catch(oError){
		if(oError instanceof SyntaxError){
			alert("Syntax Error: "+oError.message);
		}else if(oError instanceof Error){
			alert(oError.message);
		}
	}

注意: instanceof Error必须是if语句中最后一个条件,因为所有其他的错误类都继承于它.

?