返回顶部
首页 > 资讯 > 前端开发 > JavaScript >聊聊Javascript中try catch的2个作用
  • 245
分享到

聊聊Javascript中try catch的2个作用

2024-04-02 19:04:59 245人浏览 安东尼
摘要

程序是从上到下顺序执行的,同时可以通过一些控制语句来改变执行的路线,受控制语句影响下,程序最终的执行路线就是控制流。 js 里面的控制语句有 if、for、while、try cat

程序是从上到下顺序执行的,同时可以通过一些控制语句来改变执行的路线,受控制语句影响下,程序最终的执行路线就是控制流。

js 里面的控制语句有 if、for、while、try catch 等,它们都会改变程序的走向。

程序是操作数据的,随着程序的运行,也就是控制流的前进而改变的数据叫做数据流。

很明显,数据流是依赖控制流的,程序分析里面的数据流分析也是要先做控制流分析。

比如这样一段代码:


const a = 1;
let b;

if (a === 1) {
    b = '1111';
} else {
    b = '2222';
}

因为 a 为 1,所以会执行到 b = '1111';,这就是控制流,也就是程序最终执行的代码,可以用来分析程序的走向,做一些死代码删除之类的优化

而随着控制流的执行,b 会被赋值为 2222,这就是数据流,也就是值的变化的过程,可以用来分析某个语句的变量的值。

程序是针对不同数据做不同的处理,如果数据有错误,那么处理程序也就没法处理了,就会报错,会中断后续的控制流。比如数据为空、数据格式不对等等。这时候就要通过 try catch 做错误处理,也叫异常处理。

我们做异常处理有两个目的:

1、对出错的逻辑做一些兜底处理。

比如参数解析有错误的时候,在 catch 里赋一个默认值。这种错误处理之后就没必要再报出来了。这种情况下 try catch 也是作为逻辑的一部分,相当于 if else。

2、对报的错做更场景化的描述。

JS 的报错是 JS 引擎抛出的,比如调用了一个 null 对象的方法会报 TypeError,使用了未声明的变量会报

ReferenceError。而具体的 Error 是在不同场景下报出的,就有不同的含义:

如果这个对象是来自用户输入的,那就是用户输入的有错误,如果这个对象是从服务端获取的,那就意味着服务端返回的数据有错误。在不同的场景下,同一个 Error 会有更具体的含义,所以我们要做 try catch。然后抛出一个自定义的错误,包含有场景信息的错误描述。

这点很多库和框架做的都比较好,报出的错都是有具体的场景信息,甚至还有解决方式,而且还有的通过错误编号做了管理,可以通过 errorno 来查询解决方式。这种就是对错误做了自定义的处理。

而很多业务代码中报的错就并没有做这种处理,是直接把原生 Error 给报出来了。我们会通过异常监控平台来收集一些 throw 到全局的错误,而这些错误往往都是比较原始的信息,虽然带上了错误位置和堆栈,但还要通过看源码来定位问题。

比如报了一个对象为空的错误,但是我怎么知道这是什么对象为空,会是什么原因,怎么解决,有没有编号。

如果我们能够对各种错误 catch 之后 throw 出一些具体场景的自定义错误,那是不是就好的多了。这点第三方库都做得很好,而业务代码很少有人注重场景化的自定义错误。

当然,前端业务代码的用户是通过界面来使用该软件的,其实只要对各种错误做一些 UI 上的提示就可以。而库的代码是给开发者用的,那么就要对各种错误做场景化的描述,甚至给错误编号并给出解决方案。

但我觉得业务代码也应该像第三方库代码那样来对待错误,不要把没有啥意义的原生错误报出来,而是报一些有具体含义的自定义错误,这样排查和解决问题就会简单很多。

不过虽然场景化的自定义错误可以更好的帮助排查问题,那也一定是建立在对该段代码可能报的错误有把握的情况下。要是自己报出的错误信息和实际的错误原因不一样,反而会增加排查问题的难度,还不如把原生错误报出来。

总结

程序执行的流程是控制流,受控制语句影响,执行的过程中会改变数据,数据的变化叫做数据流,控制流和数据流是程序分析里面经常分析的两个方面。

错误会中断控制流,我们要对错误做一些处理,通过 try catch。

错误处理有两个目的:

一个是做一些兜底的处理,相当于 if else,不需要再把错误报出来。

一个是做对原生的 JS 错误做场景化的描述,创建一个有更具体信息的错误对象抛出来。

这点很多库做的很好,甚至还会给错误编号并给出解决方式。但业务代码其实很多只做了给用户的 UI 上的反馈,没有对抛出的错误做场景化的包装。这就导致了错误监控平台收集到的错误都是比较原始的错误,需要查看源码来排查。如果也能像库的代码那样做一些场景化的错误包装,统计和排查起问题来会容易很多,这点大多数 javascript 工程师都没做到。

到此这篇关于Javascript中try catch作用的文章就介绍到这了,更多相关Javascript中try catch作用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 聊聊Javascript中try catch的2个作用

本文链接: https://lsjlt.com/news/136316.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 聊聊Javascript中try catch的2个作用
    程序是从上到下顺序执行的,同时可以通过一些控制语句来改变执行的路线,受控制语句影响下,程序最终的执行路线就是控制流。 js 里面的控制语句有 if、for、while、try cat...
    99+
    2024-04-02
  • 聊聊Controller中RequestMapping的作用
    目录Controller@RequestMapping作用1.value,method2.consumes,produces3.params,headersController配置总...
    99+
    2024-04-02
  • 聊聊JavaScript中.?、??、??=的用法以及含义
    目录前言可选链(.)空值合并运算符()空值赋值运算符(=)趣味问答时间:值得注意的是 : 是忽视 null ,undefined 等错误的值最后前言 在项目中我们往往要做很多很多的空...
    99+
    2024-04-02
  • 聊聊技术写作的个人体会
    有群友问过,是什么原因使我开始写技术公众号,又是什么动力让我坚持写的。 在我看来,写作是一件不能敷衍的事,通过写作来学习,反而要比单纯地学习的效果要好。为了写成一篇“拿得出手”的文章,我要反复查找资料,阅读与思考,拆解与整合,最终写成的...
    99+
    2023-01-30
    技术
  • JavaScript的try和catch语句怎么用
    这篇文章主要讲解了“JavaScript的try和catch语句怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript的try和catch...
    99+
    2024-04-02
  • JS中的try catch语句有什么作用
    这期内容当中小编将会给大家带来有关JS中的try catch语句有什么作用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。程序是从上到下顺序执行的,同时可以通过一些控制语句...
    99+
    2024-04-02
  • 聊聊jquery中常用的不等号操作
    随着网页交互越来越复杂,网页制作领域也出现了很多 JavaScript 的库和插件,让开发者更加方便地实现各种功能。其中,jQuery 是最为出名的一个,它简单易用却功能强大。本文将介绍 jQuery 中常用的不等号操作。相等和不相等在 J...
    99+
    2023-05-14
  • java中try 与catch的使用
    try{ //代码区 }catch(Exception e){ //异常处理 } 代码区如果有错误,就会返回所写异常的处理。   首先要清楚,如果没有try的话,出现异常会导致程序崩溃。 而try则可以保证程序的正常运行下去,比如说: tr...
    99+
    2023-09-09
    java jvm servlet
  • 聊聊maven的pom.xml中的exclusions标签的作用
    maven pom.xml的exclusions标签作用 项目中的例子 <dependency> <groupId>org.springfram...
    99+
    2024-04-02
  • 一起聊聊JavaScript中的声明提升
    以上就是一起聊聊JavaScript中的声明提升的详细内容,更多请关注编程网其它相关文章!...
    99+
    2022-11-22
    JavaScript
  • 如何使用JavaScript中的try catch throw处理异常
    这篇文章主要为大家展示了“如何使用JavaScript中的try catch throw处理异常”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用JavaS...
    99+
    2024-04-02
  • 一文聊聊Javascript中的执行上下文
    本篇文章带大家聊聊Javascript中的执行上下文,分享一个思考题,通过对思考题的分析,想必会对执行上下文有更加深入的理解。在前面的几篇文章中,我们深入了解了关于执行上下文的三个重要成员:变量对象、作用域链和 this ,本篇文章是前四篇...
    99+
    2023-05-14
    执行上下文 javascript
  • JavaScript中如何使用try..catch..finally语法结构
    这篇文章给大家分享的是有关JavaScript中如何使用try..catch..finally语法结构的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 try..catch..finallyconst&n...
    99+
    2023-06-27
  • 详细聊聊MySQL中auto_increment有什么作用
    目录问题来源解释注意事项总结问题来源 很多时候,mysql语句中会出现【auto_increment】这个词汇,大多数时候,表都是自动生成的,刚开始学习MySQL数据库时会学习到,后来,渐渐地可能会忘记,那么这个语句的作...
    99+
    2022-06-29
    mysql中auto_increment的作用 mysql auto increment
  • 聊聊JavaScript条件判断的使用技巧
    本篇文章给大家带来了关于JavaScript的相关知识,其中主要跟大家聊一聊有关JavaScript条件判断的使用技巧,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。本文来介绍一下在 JavaScript 中如何编写更简单的条件判断,助...
    99+
    2023-05-14
    JavaScript
  • 聊聊javascript函数参数的使用方法
    JavaScript是一种常用的编程语言,常常被用来为网站和应用程序创建交互性用户界面。函数是JavaScript中最常用的概念之一,允许开发人员在代码中组织和重复使用代码块。函数可以接受多个参数,开发人员可以根据需求灵活使用它们。本文将介...
    99+
    2023-05-14
  • ​ javascript中Dima去除try-catch的方法是什么
    本篇内容主要讲解“  javascript中Dima去除try-catch的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“  ja...
    99+
    2024-04-02
  • 聊聊javascript中常见的一些转义字符
    JavaScript是一种基于文本的编程语言,因此它需要一种机制来处理特殊字符。这些特殊字符可以是控制字符,例如换行符和制表符,或者是一些需要转义的字符,例如引号和反斜杠。在JavaScript中,使用反斜杠(\)来指示特殊字符。这被称为转...
    99+
    2023-05-14
  • 聊聊JavaScript中实现继承的6种方法
    面试官:“你说说 JavaScript 中实现继承有哪几种方法?”紧张的萌新:“额,class 中用 extends 实现继承,然后...没了...”面试官:“...”······想必绝大部分人一说继承就会想到类中的继承吧,但其实继承可不是...
    99+
    2022-11-22
    javascript
  • 聊聊golang中多个defer的执行顺序
    golang 中多个 defer 的执行顺序 引用 Ture Go 中的一个示例: package main import "fmt" func main() { fmt...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作