对于js的报错处理

避免浏览器响应JavaScript错误的方法: 
1、在可能发生错误的地方使用try-catch语句。 
2、使用window.onerror事件处理语句,这种方式可以接受try-catch不能处理的所有错误(限IE、Firefox和Chrome)

try-catch语句

try{ 
//可能导致错误的代码 
}catch(error){ 
//错误处理代码 

在try块中的任何代码发生了错误,就会立即退出代码执行过程,然后接着执行catch块。此时,catch块会接收一个包含错误信息的对象,不同与其它语言,在JS中,即使不想使用这个错误对象,也必须要给它起个名字,如上面的error.这个错误对象中包含的信息因浏览器而异.共同的是都保存着错误消息的message属性。当前的浏览器也都支持name属性。 
1、finally子句 
try-catch语句是可选的,但是finally子句一经使用,其中的代码无论如何都会执行。即使try-catch语句中包含了return语句,finally子句也一定会执行。

function testFinally() {
    try{
        return 0;
    }catch (error){
        return 1;
    }finally {
        return 1;
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

调用testFinally只会返回1,因为只要代码中包含finally子句,那么无论try还是catch语句块中的retutn语句都会被忽略。 
2、错误类型 
1、Error 
2、EvalError 
3、RangeError 
4、ReferenceError 
5、SyntaxError 
6、TypeError 
7、URIError 
其中,Error是基类型,其它错误类型都继承自该类型,Error类型的错误很少见,这个基类型的主要目的是供开发人员抛出自定义错误. 
EvalError类型的错误在使用eval()函数,而不是发生异常时被抛出。 
RangeError类型的错误会在数值超出相应范围时触发 
ReferenceError类型的错误在抄不到对象的情况下触发 
syntaxError把语法错误的javascript字符串传入eval()函数时,会导致此错误 
TypeError类型在javaScript中经常用到,以下几种情况会触发这个错误: 
1、在变量中保存意外的类型。 
2、访问不存在的方法 
3、传递给函数的参数事先未经检查,结果传入类型与预期类型不一致。 
URIError类型在使用encodeURI()或者decodeURI(),而URI格式不正确时出发。 
3、合理使用try-catch语句 
当try-catch语句中发送错误时,浏览器会认为错误已经被处理,不会再抛出错误。使用try-catch最适合处理我们无法控制的错误。如果知道自己的代码发生错误时,再使用try-catch就不合适了。 
抛出错误 
throw用于抛出自定义的错误 
如果使用的是浏览器内置的错误类型,模拟的就是浏览器错误,每种错误类型的构造函数接收一个参数,即实际的错误消息。 
throw new Error(“something error”);

throw new Error("something error!");
throw new TypeError("Your type is wrong!");
throw new URIError("URI is wrong!")
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

在遇到thorw操作符时,代码会立即停止执行。 
因此我们通过注释第一句和第二句代码,可以得到下面的错误。

这里写图片描述

除了抛出浏览器自定义的错误类型,我们还可以自定义错误类型。

<script>
    function MyError(message) {
        this.name = "MyError";
        this.messages = message;
    }
    MyError.prototype = new Error();
    throw new MyError("My Error");
</script>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里写图片描述

抛出错误的目的在于提供错误发生具体原因的消息,捕获错误的目的在于避免浏览器以默认方式处理它们。

错误事件 
在任何web浏览器中,onerror事件处理函数都不会创建event对象,但它可以接收3个参数:错误消息、错误所在的URL、行号。通常,只有错误消息有用。 
window.onerror = function(message, url, line){ 
//code 

如果在事件处理程序涨返回false,可以阻止浏览器报告错误的默认行为。 
适当的使用try-catch语句,就不会有错误交给浏览器,也不会出发onerror事件。

常见的错误类型 
1、类型转换错误 
2、数据类型错误 
3、通信错误 
类型转换错误发生在使用某个操作符或者使用其他可能自动转换值的数据类型语言结构时,尽量使用全等和不全等,避免类型转换 
数据类型错误,在必要的地方检测数据类型,基本类型的值使用typeof来检测,对象使用instanceod来检测 
通信错误很多是因为不正确的URL或数据。 
如下面的URL格式就不正确 
http://www.baidu.com?wd=ni&tn=monline 
针对wd后面的所有字符串调用encodeURIComponent()可以解决这个问题: 
http://www.baidu.com?wd%3Dni%26tn%3Dmonline

我们可以定义一个处理查询字符串的函数:

<script>
   function addStringArg(url, name, value) {
       if(url.indexOf("?") == -1){
           url += "?";
       }else {
           url +="&";
       }
       url += encodeURIComponent(name) + "=" + encodeURIComponent(value);
   }
    var url = "http://www.baidu.com";
    var newUrl = addStringArg(url, "wd", "ni&tn=monline");
</script>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

此函数接收三个参数:要追加查询字符串的URL、参数名和参数值。 
我们可以使用此方法,代替手动拼接URL。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值