美文网首页
异常处理

异常处理

作者: 未路过 | 来源:发表于2022-10-01 16:55 被阅读0次

    1 异常处理

    121.PNG
       /**
     * 如果我们有一个函数, 在调用这个函数时, 如果出现了错误, 那么我们应该是去修复这个错误.
     */
    
    function sum(num1, num2) {
      // 当传入的参数的类型不正确时, 应该告知调用者一个错误
      if (typeof num1 !== "number" || typeof num2 !== "number") {
        // return undefined
        throw "parameters is error type~"
      }
    
      return num1 + num2
    }
    
    // 调用者(如果没有对错误进行处理, 那么程序会因为throw直接终止,后续代码不会继续执行,但是return undefined会继续执行)
     console.log(sum({ name: "why" }, true))
    console.log(sum(20, 30))
    
    console.log("后续的代码会继续运行~")
    

    2. throw关键字

    122.PNG

    3. error类型

    123.PNG
     // class HYError {
    //   constructor(errorCode, errorMessage) {
    //     this.errorCode = errorCode
    //     this.errorMessage = errorMessage
    //   }
    // }
    
    function foo(type) {
      console.log("foo函数开始执行")
    
      if (type === 0) {
        // 1.抛出一个字符串类型(基本的数据类型)
        // throw "error"
        // throw 100
    
        // 2.比较常见的是抛出一个对象类型
        // throw { errorCode: -1001, errorMessage: "type不能为0~" }
    
        // 3.创建类, 并且创建这个类对应的对象
        // throw new HYError(-1001, "type不能为0~")
    
        // 4.不用自己创建一个类,js提供了一个类Error
        // throw new Error("我是error")
        //会打印函数的调用栈
    
        //可以直接打印出对象里面详细内容
        // const err = new Error("type不能为0")
        // console,log(err.message)
        // console,log(err.name)
        // console,log(err.stack) 打印函数的调用栈
        //也可以自己重新赋值,开发里面不会自己手动修改
        // err.name = "why"
        // err.stack = "aaaa"
    
        // throw err
    
        // 5.Error的子类 常用于类型错误
        const err = new TypeError("当前type类型是错误的~")
    
        throw err
    
        // 强调: 如果函数中已经抛出了异常, 那么后续的代码都不会继续执行了
        console.log("foo函数后续的代码")
      }
    
      console.log("foo函数结束执行")
    }
    
    foo(0)
    
    console.log("后续的代码继续执行~")
    
    
    // function test() {
    //   console.log("test")
    // }
    
    // function demo() {
    //   test()
    // }
    
    // function bar() {
    //   demo()
    // }
    
    // bar()
    
    //test出现问题的话,会打印它是哪里调用的,他是demo里面调用的,demo是bar里面调用的,bar是全局调用的
    //跟踪当前函数是怎么一步一步被调用的
    
    

    4. 异常的处理

    124.PNG

    异常处理有两种方式,一种是不处理,一种是处理(try catch)

       function foo(type){
          if (type === 0) {
            throw new Error("foo error messsage")
          }
        }
    
        function bar(){
          console.log("bar 开始");
          foo(0);
          console.log("bar结束");
        }
    
        function test(){
          console.log("test 开始");
          bar();
          console.log("test 结束");
        }
    
        function demo(){
          console.log("demo 开始");
          test();
          console.log("demo 结束");
        }
    
        demo()
        /* 
        
        demo 开始
        test 开始
        bar 开始
    test3.html:16 Uncaught Error: foo error messsage
        */
    
        /* 
        // 1.第一种是不处理, 异常会一层一层直接抛出去,知道最顶层的调用
        如果在最顶层也没有对这个异常进行处理,那么我们的程序就会终止执行,并且报错
    
        
        */
    
        console.log("后续的代码执行~")
    

    5. 异常的捕获

    125.PNG
     function foo(type){
          console.log("foo 开始");
          if (type === 0) {
            throw new Error("foo error messsage")
          }
          console.log("foo 结束");
        }
    /* 
    如果你觉得再哪里代码执行会发生错误,一般会在对应的地方写try catch
    后续代码依旧执行.
    会把异常赋值给catch里面的err里面
    */
        function bar(){
          console.log("bar 开始");
          try {
            foo(0);
            //foo(1);
            console.log("后续代码运行");
          } catch(err){//从es10开始,你如果不想使用err的话,可以把(err)省略掉
            
            console.log(err);
            alert(err.message)
    
          } finally{
            console.log("无论出不出错,我都会执行");
          }
          console.log("bar结束");
        }
    
        function test(){
          console.log("test 开始");
          bar();
          console.log("test 结束");
        }
    
        function demo(){
          console.log("demo 开始");
          test();
          console.log("demo 结束");
        }
    
        demo()
    
    
        console.log("后续的代码执行~")
    

    相关文章

      网友评论

          本文标题:异常处理

          本文链接:https://www.haomeiwen.com/subject/hvbrartx.html