关于JS面向对象的错误与异常处理方式

更新日期: 2021-10-28阅读: 1.5k标签: 异常处理

错误与异常是什么

错误,指程序中的非正常运行状态,在其它编程语言中称为“异常”或“错误”。解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描迹信息。

通过使用JavaScript提供的异常处理语句,可以用结构化的方式来捕捉发生的错误,让异常处理代码与核心业务代码实现分离。

错误与异常处理在应用中的重要性是毋庸置疑的。任何有影响力的Web应用都需要一套完善的错误处理机制。

try…catch语句

try..catch语句作为JavaScript中处理异常的一种标准方式。try语句标记一块待尝试的语句,如果该语句出现错误,则通过catch语句进行捕获。基本的语法如下:

try {
//可能会导致错误的代码
}catch ( error ){
//在错误发生时的处理
}

捕捉块

可以使用捕捉块来处理所有可能在try代码块中产生的异常。

catch (catchID){
    statements
}

捕捉块指定了一个标识符(上述语句中的catcl:D)来存放抛出语句指定的值。可以用这个标识符来获取抛出的异常信息。

终结块

终结块包含了在try和catch块完成后、下面接着的语句之前执行的语句。终结块无论是否抛出异常都会执行。如果抛出了一个异常,就算没有异常处理,终结块里的语句也会执行。

// 用于捕获指定语句块中的错误或异常
try{
    console.log(a); // 调用未定义的变量 -> 报错
}
// 用于处理try语句中出现的错误
catch(a){
    // a - 表示语句中出现的错误信息
    console.log(a);
}
// catch语句无法处理try语句中的错误或异常时,执行finally语句中的内容
finally{
    console.log('错误');
}

嵌套try…catch语句

可以嵌套一个或多个tr...catch语句。如果一个内部的try..catch语句没有捕捉块,将会启动匹配外部的try..catch语句的捕捉块。

try {
    console.log(0);
} catch( error ){
    try {
        console.log(1);
    }catch( error ){
	console.log(2);
    }
}

基本错误类型

执行代码期间可能会发生的错误有多种类型,每种错误都有对应的错误类型。当错误发生时,就会抛出对应类型的错误对象。

Error是基本错误类型,其他错误类型都继承自该类型。Error类型的错误很少见,如果有也是浏览器抛出的。这个基本错误类型的主要目的是提供给开发人员抛出自定义错误的。

作者:吾覭
链接:https://juejin.cn/post/7023662083946315813

链接: https://fly63.com/article/detial/10767

JavaScript的异常处理

Javascript 引擎是单线程的,因此一旦遇到异常,Javascript 引擎通常会停止执行,阻塞后续代码并抛出一个异常信息,因此对于可预见的异常,我们应该捕捉并正确展示给用户或开发者。

js捕获异常处理_介绍JavaScript如何捕获常见异常【Throw、Try 和 Catch】

JavaScript和其他语言一样,都拥有捕获异常的机制。js中异常捕获的语句同样分为了三部分:try用于捕获异常,catch用于处理异常,finally用于关闭资源等后续操作。

图片懒加载及异常处理

在日常页面开发中,常常会涉及到图片的展示。有时候当图片资源过多时,我们希望能将图片延迟加载,同时当图片加载失败后,能用一张默认图片去代替其进行展示

Nodejs中request出现ESOCKETTIMEDOUT解决方案

使用Nodejs的request批量请求某一个接口,由于接口超时,出现 ESOCKETTIMEDOUT,程序中断,为了让程序遇到 ESOCKETTIMEDOUT 之后能够继续执行下去,需要对 request 部分加上 try...catch

Promise 和 async/await 的异常处理,原来还有这种坑!

Promise创建时需要传入一个function,在这个function执行过程中,如果出现了异常则会对外抛出。外部有2种方式来捕获这个异常:

如何优雅地给对象的所有方法添加异常处理

为了保证健壮性,我们要对所有可能报错的代码添加异常处理,但是每个方法都添加 try catch 又太麻烦,所以我们利用 Proxy 实现了代理,透明的给对象的所有方法都添加上了异常处理。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!