您当前的位置: 首页 > 学无止境 > JS经典实例 网站首页JS经典实例
javascript学习笔记-错误处理(抛出与捕获)与调试(try,catch)
发布时间:2018-04-05 18:17:35编辑:雪饮阅读()
使用try catch捕获错误
try{
window.abcdef();
}
catch(e){
//错误对象的toString
//alert(e);
//错误名称
//alert(e.name);
//错误信息
//alert(e.message);
}
finally
一般我们在错误发生后为了性能考量就需要清理下错误之前所产生的一些无效对象等以优化内存,其实有时候就算错误不发生也需要清理下try里面之前的残留对象等。
而对于一个方法中若存在return,那么该方法执行到此处时就会直接返回,不会继续执行了。
比如在catch中我们可能习惯性的返回错误信息于方法,那么try catch之后的代码将不会被执行到,此时我们若是后面直接放的清理工作所需的语句则也会无效。那么如何解决该问题呢?这就是finally的作用了,无论是否发生错误,即便return也会照样执行。
function box(){
try{
var obj=new Object();
window.abcdef();
}
catch(e){
alert(e);
return;
}
finally{
alert("清空错误发生前的对象");
obj=null;
}
}
box();
错误类型
执行代码时可能会发生的错误有很多种。每种错误都有对应的错误类型,ECMA-262 定义了 7 种错误类型:
1.Error
2.EvalError
3.RangeError
4.ReferenceError
5.SyntaxError
6.TypeError
7.URIError
其中,Error 是基类型(其他六种类型的父类型),其他类型继承自它。Error 类型很少见, 一般由浏览器抛出的。这个基类型主要用于开发人员抛出自定义错误。
EvalError 类型表示全局函数 eval()的使用方式与定义的不同时抛出,但实际上并不 能产生这个错误,所以实际上碰到的可能性不大。
在使用 encodeURI()和 decodeURI()时,如果 URI 格式不正确时,会导致 URIError 错误。但因为 URI 的兼容性非常强,导致这种错误几乎见不到。
//浏览器会抛出类型错误
//window.abcdef();
//new 10;
//浏览器会抛出范围错误
//new Array(-5);
//使用一个未定义的对象浏览器会抛出引用错误
//var box=xycdmj;
//浏览器会抛出语法错误
//a $ b;
友好的错误输出
try{
new 10;
}
catch(e){
if(e instanceof TypeError){
alert("类型错误:"+e.message);
}
}
错误抛出
//抛出通用错误
//throw new Error("未知错误");
//抛出类型错误
throw new TypeError("类型错误");
错误事件的监听
window.addEventListener('error',function(){
alert("有错误发生");
},false);
new 10;
onerror事件
<img src="buy1.gif" onerror="alert('图片加载失败')"/>
URL编码
alert('?user='+encodeURI('雪饮'));
console对象
console.error("错误");
console.info("信息");
console.warn("警告");
web版firebug调试工具
谷歌需要在服务器端才支持
<script type="text/javascript" src="firebug-lite/build/firebug-lite-debug.js"></script>
<script type="text/javascript">
console.error("错误");
console.info("信息");
console.warn("警告");
//系统不能自动抛出错误给 firebug-lite
var box=x;
</script>
关键字词:javascript,错误,调试,try,catch,抛出,捕获