JavaScript内置对象--Error对象

作者: puxiaotaoc | 来源:发表于2018-09-07 14:55 被阅读51次

    一、概念

          error是指程序中的非正常运行状态,在其他编程语言中称为“异常”或“错误”,解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息;
          ECMAScript定义了六种类型的错误,除此之外,还可以使用Error构造方法创建自定义的Error对象,并使用throw语句抛出该对象;
          六种错误:
          1)ReferenceError:引用错误,要用的东西没找到;
          2)TypeError:类型错误,错误的调用了对象的方法;
          3)RangeError:范围错误,专指参数超范围;
          4)SyntaxError:语法写错了;
          5)EvalError:eval()方法错误的使用;
          6)URIError:URI地址错误;

    二、错误处理

          即使程序发生错误,也保证不异常中断的机制;

    try{
      // 可能发生错误的代码
    }catch(err){
      // 只有发生错误时才执行的代码
    }finally{
      // 无论是否出错,肯定都要执行的代码
    }
    

          使用要点:
          1)使用try包裹的代码,即使不出错,效率也比不用try包裹的代码低;
          2)在try中,尽量少的包含可能出错的代码;
          3)无法提前预知错误类型的错误,必须用try...catch...捕获,如果已经提前预知错误的类型,就用if...else...来代替try...catch,除掉错误预知的这个前提,if...else...的用法和try...catch...的用法是基本相同的,且if...else...的可读性比try...catch...更强,语句理解能力也更好,开发人员与用户更加倾向于使用if...else...,但是如果无法判断语句是否正确的话,使用try...catch...会更加保险;
          4)finally可以省略;

    三、抛出自定义错误

       // if...else...
       function err(a) {
          if (!isNaN(a)) {
            console.log('你输入的数字是:' + a);
          } else {
            throw new Error('你输入的是非数字,请重新输入!')
          }
        }
        var a = prompt('请输入一位数字:');
        err(a);
    
        // 定义round函数
        function round(num, d) {
          if (!isNaN(num) && !isNaN(d)) {
            num *= Math.pow(10, d);
            return num;
          } else {
            // 抛出自定义错误
            throw new Error("参数必须是数字");
          }
        }
    
        // 调用round函数
        var d = parseInt(prompt('请输入数字'));
        try {
          alert(round(123.456, d));
        } catch (err) {
          alert(err.message); // 接住抛出的自定义错误
        }
    

    四、代码分析

        var n = 1;
    
        function fun() {
          try {
            n++;
            return n;
            n++; // 不执行
            var m =1;
          } catch (err) {
            n++;
            return n;
          } finally {
            n++;
            return n;
          }
        }
        console.log(fun()); // 3  return为finally的
        console.log(n); // 3
        console.log(m); // m is not defined
    
       var n = 1;
    
        function fun() {
          try {
            n++;
            return n;
            n++; // 不执行
            var m =1;
          } catch (err) {
            n++;
            return n;
          } finally {
            n++;
          }
        }
        console.log(fun()); // 2  return为try的
        console.log(n); // 3
        console.log(m); // m is not defined
    
        var n = 1;
    
        function fun() {
          try {
            n++;
            n+=m; // 出错
            return n;
          } catch (err) {
            n++;
            return n;
          } finally {
            n++;
          }
        }
        console.log(fun()); // 3 return为catch的
        console.log(n); // 4
    

    参考:
    js 错误Error对象详解

    相关文章

      网友评论

        本文标题:JavaScript内置对象--Error对象

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