zoukankan      html  css  js  c++  java
  • Javascript错误处理与调试

    错误处理

    1 try-catch语句

    ECMA-262第3版引入了try-catch语句,作为Javascript中处理异常的一种标准方式,基本的语句如下:

        try{
            // 可能发生错误的代码
        }chatch(error){
            // 在错误发生时怎么处理
        }
    

    如果try块中的任何代码发生了错误,就会立即退出代码执行过程,然后接着执行catch块。此时,catch块会收到一个包含错误信息的对象。这个对象中包含的实际信息会因为浏览器不同而不同,但共同的是有一个保存错误消息的message属性。因此,在发生错误时,就可以像下面这样实事求是的显示浏览器的给出的信息:

        try{
            window.someNonexistentFunction();
        }catch(error){
            alert(error.message);
        }    
    

    2 finally子句

    虽然在try-catch中是可选的,但是finally子句一经使用,其代码无论如何都会执行。try语句中的代码全部正常执行,finally子句会执行;如果因为出错而执行了catch子句中的代码,finally子句照样还是会执行。只要代码中包含finally子句,则无论try或catch语句块中的代码,甚至return语句,都不会阻止finally子句的执行:

        function testFinally(){
            try{
                return 2;
            }catch(error){
                return 1;
            }finally{
                return 0;
            }
        }
    

    错误类型

    执行代码期间可能会发生的错误有多种类型。当错误发生时,就会抛出相应类型的错误信息,ECMA-262定义了下列7种错误类型:

    • Error
    • EvalError
    • RangeError
    • ReferenceError
    • SyntaxError
    • TypeError
    • URIError

    其中,Error是基类性,其他错误类型都继承自该类型。Error类型的错误很少见,如果有也是浏览器抛出的,这个基类的主要目的是提供开发人员抛出自定义异常。
    EvalError类型的错误会在使用eval()函数的而发生异常时被抛出。如果没有把eval()当成函数调用,就会抛出错误。
    RangeError类型的错误会在数值超出相应范围时触发。
    ReferenceError类型的错误会在找不到对象的情况下发生,通常在访问不存在的变量时,就会发生这种错误。
    SyntaxError类型的错误当我们把语法错误的Javascript字符串传入eval()函数时,就会导致此类错误。
    TypeError类型的错误在变量中保存着意外的类型,或者在访问不存在的方法时,都会导致这种错误。
    URIError类型的错误在使用encodeURI()或decodeURI(),而URI格式不正确时,就会导致URIError错误。
    利用不同函数的错误类型,可以获悉更多有关异常的信息,可以像下面这样在try-catch语句的catch语句中使用instanceof操作符:

        try{
            someFunction();
        }catch(error){
            if(error instanceof TypeError){
                //处理类型错误
            }else if(error instanceof ReferenceError){
                //处理引用错误
            }else{
                //处理其他类型的错误
            }
        }
    

    在跨浏览器编程中,检查错误类型是确定处理方式的最简便途径;包含在message属性中的错误消息会因浏览器而异。

  • 相关阅读:
    函数式宏定义与普通函数
    linux之sort用法
    HDU 4390 Number Sequence 容斥原理
    HDU 4407 Sum 容斥原理
    HDU 4059 The Boss on Mars 容斥原理
    UVA12653 Buses
    UVA 12651 Triangles
    UVA 10892
    HDU 4292 Food
    HDU 4288 Coder
  • 原文地址:https://www.cnblogs.com/huangt/p/3855700.html
Copyright © 2011-2022 走看看