zoukankan      html  css  js  c++  java
  • js基础——错误处理

    一:错误捕获

    1.try-catch 语句(错误捕获)

    try{
    
      //这里放置可能出现问题的代码
    
    }catch(error){
    
      //错误发生时执行的代码
    
      console.log(error.name)    //打印错误类型
    
      console.log(error.message)  //打印错误消息
    
    }

     说明:如果try中的代码出现任何错误,就会立即退出代码执行过程,接着执行catch块。执行过catch块之后,浏览器默认错误已经处理。

    2.finally 字句

    try{
    
    }catch(error){
    
    }finally{
    
    }
    

     说明:无论try里面的语句有没有报错,catch里面的语句有没有执行到,都会执行finally语句

    例:

    function test(){
        try{
              return 1
        }catch(error){
             return 2 
        }finally{
             return 0  
        }
    }
    执行test函数,始终会返回0 因为最终都会执行finally块。

    3.错误类型

      Error:基类型,所有错误都继承该类型

      EvalError:使用eval()函数(该函数可以执行js代码语句)异常时候抛出。通常是没有直接调用该函数会导致该错误

      RangeError:数值超出相应范围触发   例如:定义一个长度为 -20  位的数组   var array = new Array(-20)

      ReferenceError:找不到对象时触发  例如:var obj = x  在变量x未定义的情况下 抛出错误

      SyntaxError:传入eval()函数的代码出现错误时抛出

      TypeError:最常见,执行特定类型的操作时,变量的类型不符合要求导致   例如:访问不存在的方法、变量中保存着意外的类型

    总结:什么时候试用try-catch语句捕获错误?

      通常在大型的项目中,或者使用别人的库,源代码不能修改  处理那些我们无法控制的错误。

      当你明确自己的代码在何时何地会出现什么错误,使用try-catch语句就不太合适了

    二:错误抛出

    1.throw    使用throw 操作符代码会立即停止执行,除非使用try-catch捕获错误

    基本语法  throw new Error('您要自定义的错误信息')    throw new TypeError()...................

    自定义错误类型

    function MyError(message){
        this.name = MyError
        this.message = message
    }
    
    MyError.prototype = new Error()   //继承Error  因为Error是所有错误类型的基类
    
    使用:throw new MyError('我自己定义的错误类型')  

    完整案例:

    function test(array){
    	if(!(array instanceof Array)){
    		throw new Error('参数不是数组')
    	}
    	array.sort();
    	for(var i = 0;i<array.length;i++){
    		if(array[i]>100){
    			return array[i];
    		}
    	}
            return -1;
    };
    
    执行该函数需要传递一个数组类型的参数
    首先验证参数是不是数组,如果不是数组则抛出错误

    总结:捕获错误的目的为了防止浏览器以默认的行为处理错误,抛出错误的目的是可以获取详细具体的错误信息

  • 相关阅读:
    Step By Step(Lua-C API简介)
    Step By Step(Lua系统库)
    复制控制( 下 ) --- 自定义析构函数
    复制控制( 中 ) --- 重载赋值运算符
    复制控制( 上 ) --- 自定义复制函数
    泛型算法结构
    流迭代器 + 算法灵活控制IO流
    一个文本查询程序的实现
    multimap容器和multiset容器中的find操作
    实用的关联容器
  • 原文地址:https://www.cnblogs.com/jayking1314/p/11951147.html
Copyright © 2011-2022 走看看