zoukankan      html  css  js  c++  java
  • JavaScript的错误处理

    一、错误类型

    Error
    EvalError
    RangeError
    ReferenceError
    syntaxError 语法错误
    TypeError
    URIError

    Error是基类型,其他错误类型都继承自该对象,因此所有的错误类型都共享一组相同的属性。该错误类型很少见。

    EvalError是使用eval()函数而发生的异常抛出的,当没有吧eval()当成一个函数使用的时候就会抛出。

    RangeError
    数值超出一定的范围会触发,在找不到对象的时候也会触发,在未声明时候去使用变量时候也会触发

    TypeError
    类型错误,最常见的额类型错误就是传递给函数的参数事先未检查

    二、try-catch语句

    try{
          leaf()
    } catch(error){
          console.log(error.message);
    }
    //leaf is not defined

    三、finally

    可选的,但是一旦使用,其代码无论如何都会执行,即使前面使用了return

    try{
            return 1;
    }catch(error){
            return 2;
    }finally{
             return 3;
    }
    
    //chrome下报错了Uncaught SyntaxError: Illegal return statement
    

    四、抛出错误  throw操作  

    在遇到throw符号的时候,代码会立即执行。仅当try-catch语句捕获到被抛出的值的时候,代码才会继续执行。

     throw new Error('something bad hanppened');
    

      

    五、Error事件
      任何没有通过try-catch处理的错误都会触发window对象的error事件。只要发生错误,无论是不是浏览器生成的,都会触发error事件,并执行这个事件的处理函数。img的没有获得正确的src也会触发。

    六、常见的错误类型

      1、类型转换错误

      console.log(1==true) //true
      console.log(1==true) //false

           在if()之类的判断语句中,在执行下一步的时候,会自动的把任何值转换成布尔值。

           方案: 建议使用 ===    !== 操作符


           2、数据类型错误

      比如
      null 和undefined 使用点操作
      对非数组的值使用sort()的reversed()等方法

      方案:
      基本类型(undefined null boolean string number)用typeof去检测;
      对象则用instanceof去检测(注意array比较特别)

           3、通信错误
      不正确的使用URL和在服务器响应的数据不正确的时候
      解决,将数据发给服务器应该使用encodeURIComponent()对数据进行编码。

    七、总结

    避免浏览器响应JavaScript错误的方法

      1、在可能发生错误的地方使用try-catch语句,这样有机会以适当的方式对错误给出响应,不必沿用浏览器的错误机制。

      2、是当时会用window.onerror事件处理程序,此方法可以处理try-catch不能处理的所有错误。

      3、发生书错误的主要原因
           类型转换,
      未充分检测数据类型
      发送到服务器或从服务器接收的数据有误

  • 相关阅读:
    ZeptoLab Code Rush 2015
    UVa 10048 Audiophobia【Floyd】
    POJ 1847 Tram【Floyd】
    UVa 247 Calling Circles【传递闭包】
    UVa 1395 Slim Span【最小生成树】
    HDU 4006 The kth great number【优先队列】
    UVa 674 Coin Change【记忆化搜索】
    UVa 10285 Longest Run on a Snowboard【记忆化搜索】
    【NOIP2016提高A组模拟9.28】求导
    【NOIP2012模拟10.9】电费结算
  • 原文地址:https://www.cnblogs.com/leaf930814/p/7221200.html
Copyright © 2011-2022 走看看