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


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

    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异常处理一样的秘密,例如:

    //代码来自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事件

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

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

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

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

    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请求优化性能的时候,应该尽量减少查询字符串的长度(比如用短点的字段名)

  • 相关阅读:
    C# 中的委托和事件
    SQLserver2000与2005同时安装的问题
    又到毕业时
    WCF服务发布和调用IIS服务
    进销存取项目总结
    URL
    undefined reference to `android::Mutex::lock()'
    关于 ffmpeg ‘UINT64_C’ was not declared in this scope 的错误
    Ti 的 OMX_Core
    linux Perforce 使用
  • 原文地址:https://www.cnblogs.com/ayqy/p/4421814.html
Copyright © 2020-2023  润新知