• JS学习笔记8_错误处理


    摘抄自:https://www.cnblogs.com/ayqy/p/4421814.html

    1.错误处理语法:(js没有异常exception一说,都是错误error)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    try{
      //throw new Error(msg);
      //throw '错误';
      //throw false;
      //throw ...
      //throw操作符的操作数没有任何限制,可以随便扔
    }
    catch(err){
      //alert(err.message);//message是唯一一个全浏览器支持的属性
    }
    finally{
      //
    }

    注意:[IE7-]有个bug:没有catch块,finally块就不执行,所以尽量使用完整的try-catch-finally

    高程中有一个描述上的错误(中文版501页):

    请读者务必记住,只要代码中包含finally子句,那么无论try还是catch语句块中的return语句都将被忽略。

    本机测试结果:对于进入finally之前遇到的return,在finally完成之后还会return。而不是书上说的“忽略”,应该只是歧义。

    此外,js存在和java异常处理一样的秘密,例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //代码来自http://www.cnblogs.com/averey/p/4379646.html
    function aaa(){
      var x = 1;
     
      try {
        return ++x;
      catch (err) {
     
      } finally {
        ++x;
      }
      return x;
    }
     
    (function(){
      var y = aaa();
      alert(y);//2
    })();

    详情请查看:

    当然,这种小秘密知道就好,不必深究

    2.七种错误类型

    • Error

    • EvalError

    • RangeError

    • ReferenceError

    • SyntaxError

    • TypeError

    • URIError

    3.error事件

    作为避免浏览器报错的最后一道防线,语法如下:

    1
    2
    3
    window.onerror = function(msg, url, line){
      return true;//不报错
    }

    注意:只能用上面的DOM0级方式添加事件处理器,因为它没有遵循DOM2级标准

    注意:高程中文第三版506页有点问题,实际上是返回true表示不报错,而不是书上的返回false,测试代码如下:

    1
    2
    3
    4
    5
    window.onerror = function(e){
      return true;//Chrome, FF, IE8都不报错
      //return false;//Chrome, FF报错,IE8不报错
    }
    'str'.startWith('x');///触发错误

    4.一些常识

    1. 尽量使用===和!==来比较,以避免类型转换和类型转换错误

    2. 在控制语句中尽量使用布尔值,而不要用if(value)这样的结构,因为自动进行的类型转换会导致存在多个假值:

      • false

      • +0/-0

      • undefined

      • null

      • ”/””(空字符串)

      • NaN

    这些假值可能会导致出乎意料的结果,如果只用===和!==的话就只有false一个假值,可以精确地表意

    1. 不要用if(value != null)和if(value != undefined)这样的检测,而应该:

      • 用if(value instanceof Type)来检测对象值

      • 用if(typeof value === strType)来检测基础类型值

    2. 不要用body中的脚本进行document.body相关DOM操作(增删节点),因为可能会引发IE错误

    3. 外部js文件也可能会导致js语法错误,而报错信息望望不准确,难以发现,所以在引用外部脚本之前应该做充分的测试

    4. IE对URI长度限制不超过2048个字符,因此在使用get替代post请求优化性能的时候,应该尽量减少查询字符串的长度(比如用短点的字段名)


  • 相关阅读:
    php date 时间差
    array_merge 和 + 号的的区别
    apache 添加https后导致http无法访问
    php 获取url
    TP5 事务处理
    LeetCode 每日一题 (盛最多水的容器)
    LeetCode 每日一题 (字符串转换整数 (atoi))
    LeetCode 每日一题(5. 最长回文子串)
    LeetCode 每日一题 (3 无重复字符的最长子串)
    LeetCode 每日一题 (两数相加)
  • 原文地址:https://www.cnblogs.com/smile-fanyin/p/14647339.html
Copyright © 2020-2023  润新知