IE、Firefox、Safari、Chrome和Opera等主流浏览器,都具有某种向用户报告JavaScript错误的机制。默认情况下,所有浏览器都会隐藏此类信息,需要开发人员启用报告功能
try-catch语句
基本用法
try{
// 可能会发生错误的代码
} catch(error){
// 在错误发生时怎么处理
}
- 当try块中的任何代码发生了错误,就会立即退出,执行catch块中的代码,这一点和python的try-except语句很像。
- error对象必须传入,即使你不想使用它,其具有一个message属性,保存着错误消息。
还可以添加finally语句,值得注意的是,无论前面try-catch语句块是否出错,最后一定会执行finally语句块的代码,即使前面包含return语句
function test(){
try{
return 2;
}catch(error){
return 1;
}finally{
return 0;
}
}
以上函数会返回0,而不是2,finally之前的return语句会被忽略
错误类型
- Error:基类型,所有错误都继承自该类型
- EvalError:使用eval()函数时发生错误
- RangeError:数值超出相应范围,例如数组越界等
- ReferenceError:访问不存在的变量
- SyntaxError:语法错误
- TypeError:变量的类型不符合要求,例如传递给函数的参数
- URIError:使用encodeURI()或decodeURI(),而URI格式不正确时
抛出错误
使用throw操作符,后接任意值,遇到该操作符,代码会立即停止执行,直到有try-catch语句捕获到被抛出的值
throw 12345;
throw "hello";
throw {name:"123"};
通常抛出某种内置的错误类型,可以更真实地模拟浏览器错误
throw new Error("bad");
throw new SyntaxError("bad");
也可以继承Error类型自定义错误,并抛出
function customError(message){
this.message = message;
this.name = "customError";
}
customError.prototype = new Error();
throw new customError("an error");
错误事件
任何没有通过try-catch处理的错误都会触发window对象的error事件。该事件不会创建event对象,而是接受三个参数:错误消息,错误所在的URL以及行号。要指定error事件处理程序,必须使用DOM0级技术。
window.onerror = function(message,url,line){
alert(message);
return false; //通过返回false,阻止浏览器报告错误的默认行为
};
图像也支持error事件,当图像不能识别图像格式时,触发,此时会返回一个以图像为目标的event对象
var image = new Image();
image.onerror = function(evnet){
alert("123");
};
调试
通过console对象向Javascript控制台写入消息,这个对象具有以下方法
- error(message):将错误消息记录到控制台
- info(message):将信息性消息记录到控制台
- log(message):将一般消息记录到控制台
- warn(message):将警告消息记录到控制台
可以使用assert()
函数抛出错误信息,该函数接受两个参数,一个逻辑表达式和一个字符串。当逻辑表达式为false时,则输出传入的字符串(一般为错误消息)
console.assert(1==2,"1不等于2");