• 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属性中的错误消息会因浏览器而异。

  • 相关阅读:
    函数式编程
    scala 有 + 运算符吗?
    使用 Idea 打 scala程序的 jar 包
    相见恨晚的 scala
    半夜思考,为什么 String 具有不变性
    我的常用
    DataTable学习笔记
    Js 操作cookie
    嵌套的 ajax 请求
    Jquery插件收集【m了慢慢学】
  • 原文地址:https://www.cnblogs.com/huangt/p/3855700.html
Copyright © 2020-2023  润新知