• 你知道JavaScript这六种错误类型吗?


    前言

    今日话题,了解JavaScript的错误处理机制。

    一、ReferenceError

    引用一个不存在的变量时发生的错误。将一个值分配给无法分配的对象,比如对函数的运行结果或者函数赋值。

    举栗子

      try {
              console.log(a) // a 未声明的变量
            } catch (e) {
                if (e instanceof ReferenceError) {
                    console.log(e.name + ": " + e.message); // ReferenceError: a is not defined 
                } 
            }
    

    构建一个ReferenceError

            try {
              throw new ReferenceError('Hello', 'someFile.js', 10);
            } catch (e) {
             console.log(e instanceof ReferenceError); // true
             console.log(e.message);                   // "Hello"
             console.log(e.name);                      // "ReferenceError"
             console.log(e.fileName);                  // "someFile.js"
             console.log(e.lineNumber);                // 10
             console.log(e.columnNumber);              // 0
             console.log(e.stack);                     // "@Scratchpad/2:2:9
    "
            }
    
        如果未声明变量就使用,就会抛出这个异常哦!
    

    二、TypeError

    变量或参数不是预期类型时发生的错误。比如使用new字符串、布尔值等原始类型和调用对象不存在的方法就会抛出这种错误,因为new命令的参数应该是一个构造函数。

    举栗子

      try {
              var a = {}
              a.go()
            } catch (e) {
                if (e instanceof TypeError) {
                    console.log(e.name + ": " + e.message); // TypeError: a.go is not a function
                } 
            }
    

    三、EvalError

    在ES5以下的JavaScript中,当eval()函数没有被正确执行时,会抛出evalError错误。

    举栗子

     var myEval = eval;
     myEval("alert('call eval')");
     
    
        ES5以上的JavaScript中已经不再抛出该错误,但依然可以通过new关键字来自定义该类型的错误提示。
    

    四、RangeError

    数值变量或参数超出其有效范围

    举栗子

      try {
             [].length = -1
            } catch (e) {
                if (e instanceof RangeError) {
                    console.log(e.name + ": " + e.message); // RangeError: Invalid array length
                } 
            }
    

    五、SyntaxError

    语法错误,比如变量名不规范

    举栗子

      try {
              var 1 
            } catch (e) {
                if (e instanceof SyntaxError) {
                    console.log(e.name + ": " + e.message); // SyntaxError: Unexpected number
                } 
            }
    

    六、URIError

    给 encodeURI()或 decodeURl()传递的参数无效

    举栗子

    捕获一个URIError

     try {
      decodeURIComponent('%');
    } catch (e) {
      console.log(e instanceof URIError); // true
      console.log(e.message);             // "malformed URI sequence"
      console.log(e.name);                // "URIError"
      console.log(e.fileName);            // "Scratchpad/1"
      console.log(e.lineNumber);          // 2
      console.log(e.columnNumber);        // 2
      console.log(e.stack);               // "@Scratchpad/2:2:3
    "
    }
    

    创建URIError实例

    try {
      throw new URIError('Hello', 'someFile.js', 10);
    } catch (e) {
      console.log(e instanceof URIError); // true
      console.log(e.message);             // "Hello"
      console.log(e.name);                // "URIError"
      console.log(e.fileName);            // "someFile.js"
      console.log(e.lineNumber);          // 10
      console.log(e.columnNumber);        // 0
      console.log(e.stack);               // "@Scratchpad/2:2:9
    "
    }
    

    兼容性

  • 相关阅读:
    spark内存管理这一篇就够了
    spark推测机制及参数设置
    python易错点汇总,不定期更新
    Spark架构与原理这一篇就够了
    MySQL查询这一篇就够了
    pyspark计算最大值、最小值、平均值
    Spark性能调优的方法
    大流量场景下MySQL如何准备
    100台CentOS7要分区怎么办?
    100台CentOS7要升级OpenSSH怎么办?
  • 原文地址:https://www.cnblogs.com/ifannie/p/11448553.html
Copyright © 2020-2023  润新知