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;
    };
    
    执行该函数需要传递一个数组类型的参数
    首先验证参数是不是数组,如果不是数组则抛出错误

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

  • 相关阅读:
    mac 提示app已经损坏打开的方法
    查看mac ip地址
    前端页面输入框合法性校验
    mybatis报错:Cause: java.sql.SQLSyntaxErrorException: Unknown column 'end_date' in 'field list'
    mybatis项目报错:Cause: java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String
    项目中遇到的错误:Caused by: java.net.BindException: Address already in use: bind
    hashMap&hashtable&ConcurrentMap的区别
    3.java面试题(三)
    Mybatis项目启动时报错:The server time zone value '�й���׼ʱ��' is unrecognize
    1.java面试题(一)
  • 原文地址:https://www.cnblogs.com/jayking1314/p/11951147.html
Copyright © 2011-2022 走看看