JS高级——错误处理

一、错误处理方案

开发中我们会封装一些工具函数,封装之后给别人使用:

  • 在其他人使用的过程中,可能会传递一些参数;
  • 对于函数来说,需要对这些参数进行验证,否则可能得到的是我们不想要的结果;

很多时候我们可能验证到不是希望得到的参数时,就会直接return:

  • 但是return存在很大的弊端:调用者不知道是因为函数内部没有正常执行,还是执行结果就是一个undefined;
  • 事实上,正确的做法应该是如果没有通过某些验证,那么应该让外界知道函数内部报错了;

如何可以让一个函数告知外界自己内部出现了错误呢?

  • 通过throw关键字,抛出一个异常;

throw语句:

  • throw语句用于抛出一个用户自定义的异常;
  • 当遇到throw语句时,当前的函数执行会被停止(throw后面的语句不会执行);
    在这里插入图片描述

如果我们执行代码,就会报错,拿到错误信息的时候我们可以及时的去修正代码。

二、throw关键字

throw表达式就是在throw后面可以跟上一个表达式来表示具体的异常信息:
在这里插入图片描述
throw关键字可以跟上哪些类型呢?

  • 基本数据类型:比如number、string、Boolean
  • 对象类型:对象类型可以包含更多的信息

但是每次写这么长的对象又有点麻烦,所以我们可以创建一个类:
在这里插入图片描述

三、Error类型

事实上,JavaScript已经给我们提供了一个Error类,我们可以直接创建这个类的对象:
在这里插入图片描述

在这里插入图片描述

四、异常的处理

我们会发现在之前的代码中,一个函数抛出了异常,调用它的时候程序会被强制终止:

  • 这是因为如果我们在调用一个函数时,这个函数抛出了异常,但是我们并没有对这个异常进行处理,那么这个异常会继续传递到上一个函数调用中
  • 而如果到了最顶层(全局)的代码中依然没有对这个异常的处理代码,这个时候就会报错并且终止程序的运行

我们来看一下这段代码的异常传递过程:

  • foo函数在被执行时会抛出异常,也就是我们的bar函数会拿到这个异常;
  • 但是bar函数并没有对这个异常进行处理,那么这个异常就会被继续传递到调用bar函数的函数,也就是test函数;
  • 但是test函数依然没有处理,就会继续传递到我们的全局代码逻辑中;
  • 依然没有被处理,这个时候程序会终止执行,后续代码都不会再执行了;
    在这里插入图片描述

五、异常的捕获

但是很多情况下当出现异常时,我们并不希望程序直接推出,而是希望可以正确的处理异常:

  • 这个时候我们就可以使用try catch
    在这里插入图片描述

在ES10(ES2019)中,catch后面绑定的error可以省略。
当然,如果有一些必须要执行的代码,我们可以使用finally来执行:

  • finally表示最终一定会被执行的代码结构;
  • 注意:如果try和finally中都有返回值,那么会使用finally当中的返回值;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k1658停运到什么时候_春节网购别被商家忽悠!春节快递不停运,但价格会和平时不一样...

现在临春节已经越来越近了,这些天也是网购订单大幅度增长的时间,因为年底的时候很多人的网购需求都爆发了,会想着买各种东西到家,包括年货的置办。也就是在这种时候,很多网店过年的时候都会休息,但是也有一…

JS高级——模块化学习笔记

一、什么是模块化? 到底什么是模块化、模块化开发呢? 事实上模块化开发最终的目的是将程序划分成一个个小的结构;这个结构中编写属于自己的逻辑代码,有自己的作用域,不会影响到其他的结构;这个结构可以将…

JS高级——JSON、数据存储学习笔记

在目前的开发中,JSON是一种非常重要的数据格式,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据格式。 JSON的全称是JavaScript Object Notation(JavaScript对象符号): JSON是由Douglas Cro…

beautifulsoup获取属性_Python爬虫常用模块:BeautifulSoup

BeautifulSoup用途 BeautifulSoup 借助网页的结构和属性等特性来解析网页,可以用它来方便地从网页中提取所需信息。 BeautifulSoup自动将输入文档转换为Unicode编码,输出文档转换为UTF-8编码。BeautifulSoup依赖于解析器 它除了支持Python标准库中的HTML…

CSS3选择器的研究

属性选择器 [title]:选择带有title属性的元素 [titlehello]:选择属性是title并且值是hello的元素 [title~hello]:选择属性是title并且部分值是hello的元素,hello需要是单独的值,以空格分开 [title*hello]:选择属性是title并且其中包含了hello的元素 [tit…

手写实现简单的Vue事件总线

一、什么是事件总线 自定义事件总线属于一种观察者模式,其中包括三个角色: 发布者(Publisher):发出事件(Event);订阅者(Subscriber):订阅事件&a…

手写实现深拷贝函数

对象相互赋值的一些关系,分别包括: 引入的赋值:指向同一个对象,相互之间会影响;对象的浅拷贝:只是浅层的拷贝,内部引入对象时,依然会相互影响;对象的深拷贝:两…

第一款支持容器和云部署的开源数据库Neo4j 3.0

导读Neo4j 3.0.0 正式发布,这是 Neo4j 3.0 系列的第一个版本。此版本对内部架构进行了全新的设计;提供给开发者更强大的生产力;提供更广阔的部署选择。Neo4j 3.0 被认为是世界上最具伸缩性的基于Java的图片数据库。Neo4j 3.0.0 主要的新特性&…

手写防抖和节流函数

一、认识防抖debounce函数 我们用一副图来理解一下它的过程: 当事件触发时,相应的函数并不会立即触发,而是会等待一定的时间;当事件密集触发时,函数的触发会被频繁的推迟;只有等待了一段时间也没有事件触…

中webgl解析json_WebGL蒙皮(下)

今天继续学习webgl一个重要功能:skinning(蒙皮),内容来自学习网站webglfundamentals,这里仅供学习交流,原文链接:https://webglfundamentals.org/webgl/lessons/zh_cn/webgl-skinning.html。文章并非原创!如…

Vue权限控制——动态注册路由

需求:实现后台管理系统不同用户的权限控制 根据登录的用户的角色动态展示后台管理系统的左侧菜单栏的菜单列表内容,然后还要动态注册对应子菜单的路由 菜单列表内容应该通过后端接口返回: sort为1表示当前项有子菜单sort为2表示当前项没有子…

react不同环境不同配置angular_前端问题集:vue配置环境-给不同的环境配不同的打包命令...

通过vue-cli脚手架构建出一个前端项目,通过npm run build打包,发布到线上,但是这样做需要每次都手动修改接口地址。我们可以通过自行配置打包命令实现无需修改接口地址,打各个环境的包。文档结构大致如下图:1.找到conf…

基于Element-plus封装配置化表单组件(组件的v-model实现)

一、预备知识 1.1 组件的v-model 前面我们在input中可以使用v-model来完成双向绑定: 这个时候往往会非常方便,因为v-model默认帮助我们完成了两件事;v-bind:value的数据绑定 和 input的事件监听; 如果我们现在封装了一个组件…

Scala IDE for Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)

不多说,直接上干货! 这篇博客是, 是在Scala IDEA for Eclipse里maven创建scala和java代码编写环境。 Scala IDEA for Eclipse里用maven来创建scala和java项目代码环境(图文详解) 本博文包括: Scala IDE fo…

笔记本AutoCAD启动时闪退怎么办_戴尔笔记本电脑开不了机如何解决【解决方法】...

生活在互联时代下,我们对笔记本的需求是无处不在的,不管是上班族还是学生党,使用笔记本办公和学习给我们的生活带来很大的便捷。但使用的过程中,总有可能会遇到无法预料的问题。比方说 笔记本电脑 无法开机的问题,当…

JS高级——函数执行、作用域链内存结构图

一、JavaScript的执行过程 假如我们有下面一段代码,它在JavaScript中是如何被执行的呢? 1.1 第一步:初始化全局对象 js引擎会在执行代码之前,会在堆内存中创建一个全局对象:Global Object(GO&#xff09…

JS高级——内存管理和闭包

0、预备知识 0.1 认识内存管理 不管什么样的编程语言,在代码的执行过程中都是需要给它分配内存的,不同的是某些编程语言需要我们自己手动的管理内存,某些编程语言会可以自动帮助我们管理内存: 不管以什么样的方式来管理内存&…

提取多个字段_【博客翻译】建筑物轮廓线提取以及损坏分类

原文链接原作者:Rohit Singh, Sandeep Kumar贡献者:Vinay Viswambharan, Divyansh Jha, Shivani Pathak, Daniel Wilson.翻译:荆雪涵在今年的 Esri 用户大会上,USAA 展示了基于 ArcGIS 深度学习能力,对 Woolsey 火灾进…

读取外部配置文件_SpringBoot外部配置、优先级及配置详解

一、外部配置及优先级SpringBoot的外部配置属性值官方给出了很多种方式,以便可以在不同的环境中使用相同的代码。其使用了非常特别的PropertySource命令,旨在允许合理的覆盖值。当然,如果属性值不同,则这些配置方式中的属性值都会…

Jquery 禁用浏览器的 后退和前进按钮

使用js,Jquery 禁用浏览器的back 和 next 按钮: 有时为了防治用户乱了访问顺序,不得不禁掉浏览器的前进后退按钮。 jQuery(document).ready(function () {if (window.history && window.history.pushState) {$(window).on(popstate, function ()…