【JS篇之】异常

前言:在代码编写过程中,最常遇到的就是程序异常。其实异常并非坏事,它可以让开发人员及时发现、定位到错误,提醒我们做正确的事情,甚至在某些时候,我们还会手动抛出异常。

1.异常的分类

在JS中,异常表现为一个对象,不同的对象表达了不同的异常类型,不同类型的异常对应的是不同的错误,以下列举了几个最常见的异常类型:

异常类型含义例子
SyntaxError语法错误在这里插入图片描述
ReferenceError引用错误,往往是引用了未定义的变量或函数在这里插入图片描述
TypeError类型错误,往往是使用了一个对象中不存在的成员在这里插入图片描述

从例子中可以看出每个异常对象都至少记录了两个关键信息:

  1. 错误信息描述:描述异常出现的原因
  2. 调用位置信息:描述异常出现的位置

2. 捕获异常

捕获异常就是处理错误,当错误发生后,我们对错误进行相应的处理,让程序不至于因为某部分代码报错而终止,导致页面卡死或者崩溃(白屏)。

try {// 代码1
}
catch(error) {// 代码2:当代码1出现异常后,会执行这里的代码,异常对象会传递给参数error
}
finally {// 代码3: 可以省略不写,因为无论是否有异常都会执行这里的代码
}// 无异常的执行顺序:代码1 --> 代码3
// 有异常的执行顺序: 代码1 --> 出现异常,中断代码1的执行 --> 执行代码2 --> 执行代码3

在绝大部分时候,我们都无须捕获异常,除非已经预知到某段代码在某些场景下会出现异常,并且我们知道出现异常后要做些什么。
例如:当网络断线或者服务器宕机时,接口响应报错,捕获到错误之后给用户弹出友好性的提示语。

3. 手动抛出异常

不仅浏览器会自动给我们抛出异常,我们也可以手动的抛出异常

throw 异常对象; // 当代码运行到这里,会终止执行,同时抛出异常对象,显示效果和浏览器抛出的错误一样

在这里插入图片描述
下面举例一个需要抛出异常的场景:

/*** 得到两个数字之和* 若传参不是数字,则抛出TypeError* @param {number} a 数字1* @param {number} b 数字2* @return {number} 两数之和*/
function sum(a, b) {if (typeof a != "number" || typeof b != "number") {throw new TypeError("必须传入两个数字才能求和");}return a + b;
}

⚠️注:如果某个函数需要抛出异常,最好在文档注释中阐述原因。

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

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

相关文章

考研英语作文---写作要义

应用文结构 例题 信件 ------第一段写法 第一段 第二段 第三段 第一段 第三段 第二段 强调句方式开头方式 练习

【Vue 2.x】学习vue之一基础部分

文章目录 Vue 一基础部分第一章1、git两个分支主分支子分支 使用方法方式1:采用命令的方式操作分支方式2:在idea中使用git的分支 向git远程仓库提交时忽略文件使用git时的一些冲突注意事项 2、Vue问题1:什么是Vue?问题2&#xff1…

数据库(MySQL)—— DML语句

数据库(MySQL)—— DML语句 什么是DML语句添加数据给全部字段添加数据批量添加数据 修改数据删除数据 什么是DML语句 在MySQL中,DML(Data Manipulation Language,数据操纵语言)语句主要用于对数据库中的数…

金融案例:统一查询方案助力数据治理与分析应用更高效、更安全

随着企业数据规模的增长和业务多元化发展,海量数据实时、多维地灵活查询变成业务常见诉求。同时多套数据库系统成为常态,这既带来了数据管理的复杂性,又加大了数据使用的难度,面对日益复杂的数据环境和严格的数据安全要求&#xf…

开发一个语音聊天社交app小程序H5需要多少钱?

社交,即时通讯APP系统。如何开发一个社交App||开发一个即时通信应用是一项复杂而充满挑战的任务,需要考虑多个技术、开发时间和功能方面的因素。以下是一个概要,描述了从技术、开发时间和功能角度如何开发这样的应用: 1. 技术要点…

Linux查看某一个程序的安装路径

前提 这一方法的前提条件是:必须是运行着的程序。 方法 这里以查找运行的nginx的安装目录为例。 查看nginx运行进程,查看当前进程的PID,例子中的PID就是7992。 nginps -aux|grep nginx执行ls -l /proc/进程号/exe,然后会打印…

十一、大模型-Semantic Kernel与 LangChain 的对比

Semantic Kernel 与 LangChain 的对比 Semantic Kernel 和 LangChain 都是用于开发基于大型语言模型(LLM)的应用程序的框架,但它们各有特点和优势。 基本概念和目标 Semantic Kernel 是一个由微软开发的轻量级 SDK,旨在帮助开发…

C++Day 7 作业

1、lambda #include <iostream>using namespace std;int main() {int a 100;int b 90;int temp;auto fun [&]()mutable->int {temp a;ab;btemp;};fun();cout<<a<<endl;return 0; } 2、vector #include <iostream> #include <vector>…

C#应用程序实现多屏显示

前言 随着业务发展&#xff0c;应用程序在一些特定场景下&#xff0c;只在一个显示器上展示信息已经不能满足用户需求。我们如何把主屏运行程序中多个窗体移动到各个扩展屏幕位置显示呢&#xff1f;C# 是通过什么方式来实现的&#xff0c;下面介绍 C# 使用 Screen 类的方式来实…

经典机器学习法---感知模型机

优质博文&#xff1a;IT-BLOG-CN 1、模型形式 感知机模型主要用于解决二分类问题&#xff0c;即响应变量Y是个二分类变量&#xff08;如性别&#xff09;。其基本思想是拟找出一个超平面S&#xff0c;将样本空间中的训练集分为两个部分&#xff0c;使得位于超平面S合一侧的点具…

Python 与 TensorFlow2 生成式 AI(三)

原文&#xff1a;zh.annas-archive.org/md5/d06d282ea0d9c23c57f0ce31225acf76 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第七章&#xff1a;使用 GAN 进行风格转移 神经网络在涉及分析和语言技能的各种任务中正在取得进步。创造力是人类一直占有优势的领域&…

曹操出行冲刺港交所上市:2023年收入突破100亿元,规模效应显现

近日&#xff0c;曹操出行有限公司&#xff08;下称“曹操出行”&#xff09;向港交所递交上市申请&#xff0c;华泰国际、农银国际、广发证券&#xff08;香港&#xff09;担任其联席保荐人。 据招股书介绍&#xff0c;曹操出行由吉利控股集团于2015年孵化成立&#xff0c;使…