前端面试基础必备JS学习笔记

JavaScript内置对象--Error对象

2018-09-07  本文已影响51人  puxiaotaoc

一、概念

      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对象详解

上一篇 下一篇

猜你喜欢

热点阅读