【js】js内置对象Error(错误机制)

  • Error:基类型;
  • ReferenceError:找不到对象时抛出;
  • SyntaxError:语法错误;
  • TypeError:类型错误时抛出;
  • EvalError:eval()函数发生异常时抛出;
  • InternalError :js引擎内部发生的错误;
  • RangeError:数值超出范围时触发;
  • URIError:URI格式不正确时抛出,常发生在encodeURI或者decodeURI调用时;
  • DOMException:调用web api属性时发生的异常事件 

 

Error

当运行时错误产生时,Error 对象会被抛出。Error 对象也可用于用户自定义的异常的基础对象

Error 构造函数可以实例化一个 error 对象 (也就是Error 实例),而 error 对象就是一个包含了错误信息的对象。

当代码解析或者运行时发生错误,javascript 引擎就会自动产生并抛出一个 error 对象,

然后程序就中断在发生错误的地方。

demo:

const error = new Error('Whoop!');
error.message; // Whoop!
error.name; // Error
error.stack; // "Error: Whoops! at <anonymous>:1:13"

我们常用的 message 和 name 都是 error 的标准属性,由于各个浏览器厂商对 error 进行了不同的扩展,所以在不同的浏览器中,error 也有不同的属性和方法, 非标准属性中我们常用的是 stack 属性(很多浏览器都扩展了这一属性), 它用来表示栈跟踪信息。

message 错误信息
name 错误类型
constructor 指定一个函数用来创建实例的原型,也就是指定构造器(创建自定义 Error 会用到)
stack (非标准) 栈跟踪信息

ReferenceError  

ReferecnceError 错误会在找不到对象时发生,

  console.log(a);

没有定义就直接使用

SyntaxError

当您尝试运行的代码不符合 JavaScript 的语法规则时,就会发生语法错误。

let arr = 2b

将抛出以下错误,因为我们忘记给字符串添加引号了,不符合 JavaScript 语法规则。

TypeError

TypeError 错误主要发生在变量不是预期类型,

或者访问不存在的方法时发生,

实际开发过程中会有很多原因导致这种错误,

尤其是在使用类型特定的操作而变量类型不对时发生,比如这个:

let str = "hello";
str.forEach((element) => {
  console.log(element);
});

 

 

错误处理

1、错误捕获:try ... catch
2、抛出错误:throw new Error

throw 语句

throw 过程是阻塞的,程序会中断在第一个抛出错误的地方,所以后面的代码不会执行。

throw new SyntaxError('this is syntax error'); 
throw 123; // 不执行
throw 'hi there'; // 不执行
throw true;  // 不执行

 

 

 

catch 语句

catch 代码块捕获错误之后,程序不会中断,会按照正常流程继续执行下去。

 demo1:
try {
  throw new Error('Whoops!');
} catch (e) {
  console.log(e.name + ':' + e.message);
}
console.log('hello!');

 

 

 

demo2

try{
  console.log(a);
} 
catch (error){
  console.log(error);
}
console.log('还可以执行')

 

 

 

      function something(){
        if(Math.floor(Math.random()* 10)% 2 === 0){
            console.log('0-10的随机数是偶数,可执行');
        }
        else {
            //抛出错误
            throw new Error('0-10的随机数是奇数,不执行');
        }
    }
    try {
        something()
      //有可能抛出错误,需要捕获异常
    } catch(error){
        alert(error.message)
    }

 

 

 

 

 

相关资料:

 

posted on 2023-04-13 18:20  smile轉角  阅读(172)  评论(0编辑  收藏  举报

导航