1、try-catch语句进本语法
js中的try-catch语句与java中的语法完全一致,基本语法如下:
try{
//可能会导致错误的代码
}catch(error){
//错误发生时怎么处理
}
代码实例:创建一个html文件,如test.html
在Chrome中运行后会弹出如下错误信息 ,这个信息也是console控制台给出的信息,所以对调试并没有实际意义,只是熟悉一下语法
2、错误类型
ECMA-262定义了如下7种类型:
(1) Error,基类型,其他错误都继承该类型,也是浏览器抛出的错误
(2) EvalError,该错误类型在使用eval()函数发生异常时被抛出;如果没把eval()当成函数调用,就会抛出错误,例如
new eval();//抛出EvalError
eval=foo;//抛出EvalError
(3) RangeError,数值超出范围时抛出该错误,如数组超出下标范围等
(4) ReferenceError,找不到对象的情况下,会发生该错误,如使用未声明的对象,浏览器会抛出“object expected”
(5) SyntaxError,把语法错误的js字符传入eval()函数时,就会导致此错误,如eval(“a++b”);
(6) TypeError,在变量中保存意外类型时,或访问不存在的方法时都会导致该错误,归根结底还是由于在执行特定类型的操作时,变量的类型不符合要求所致,例如
var o = new 10;//抛出TypeError
alert("name" in true);//抛出TypeError
Function.prototype.toString.call("name");//抛出TypeError
(7) URIError,在使用encodeURI()或decodeURI(),而格式不正确时,会导致该错误
要想知道错误类型,可以在catch语句中使用instanceof操作符
try {
window.someFunction();
} catch (error) {
if (error instanceof TypeError) {
//处理类型错误
} else if (error instanceof ReferenceError) {
//处理引用错误
} else {
//处理其他类型错误
}
}
3、合理使用try-catch语句
当try-catch语句中发生错误时,浏览器会认为错误已经被处理了,因而不会记录或报告错误。
try-catch语句适合处理我们无法控制的错误。比如我们在使用一个大型JavaScript库中的函数时,该函数可能会抛出一些错误。由于我们无法修改源代码,所以可以将其放在try-catch语句中,处理那些意想不到的错误。
如果已经很清楚的知道自己的代码会发生错误就没必要使用try-catch语句了。
4、throw操作符抛出自定义错误
与try-catch语句相配的还有throw操作符,用于随时抛出自定义错误,抛出错误时,必须给throw操作符指定一个值,而值的类型没有要求,下列代码都是有效的
throw 123;
throw "hello";
throw true;
throw {name:"javascript"};
当遇到throw操作符时,代码会立即停止执行,仅当有try-catch语句捕获到被抛出的值时,代码才会继续执行。
通过使用某种内置错误类型,可以模拟浏览器报出的错误,例如:
throw new Error("Something bad happened!");
throw new SyntaxError("Incoming parameter of eval() can't be recognized!");
throw new RangeError("out of the max range!");
throw new TypeError("Type error!");
throw new EvalError("The eval() is not a variable!");
throw new URIError("the format of URI is not correct!");
throw new ReferenceError("the object is not found!");
利用原型链可以通过继承Error来创建自定义错误类型。此时需要为新创建的错误类型指定name和message属性,例如
function CustomError(message){
this.name="CustomError";
this.message=message;
}
CustomError.prototype=new Error();
throw new customError("My message");
5、阻止浏览器报告错误的默认行为
如果没有try-catch语句处理,当代码出现错误时,浏览器会报告默认的errro信息,包括三个方面信息:错误消息、错误所在的URL和行号,然而有时候这些错误信息并没有什么用,因为错误所在的行可能时外部的文件或内嵌的js代码,导致错误信息不精确,因此需要阻止浏览器的这种默认错误报告,代码如下:
window.onerror=function (message,url,line){
alert(message);
return false;
};
通过返回false,这个函数就相当于充当了整个文档中的try-catch语句,可以捕获所有五代码处理的运行时错误,只要能搞适当地使用try-catch语句,就不会有错误交给浏览器,也就不会触发error事件。
6、常见http错误请求状态码
400 错误请求
401 未授权,用户需要进行验证
403 禁止访问
404 未找到资源
408 请求超时
414 请求的URI过长