JavaScript异常处理

        在JavaScript中,异常是指在代码执行过程中发生的错误或意外情况。异常处理是一种机制,用于捕获和处理这些异常,以避免程序崩溃或产生意外结果。JavaScript提供了一些关键字和语句,用于实现异常处理。

一、try-catch-finally

try-catch-finally块是JavaScript中异常处理的核心部分。它由三个关键字组成:

  • try:在try块中编写可能引发异常的代码。
  • catch:在catch块中定义异常处理逻辑,用于捕获并处理异常。
  • finally:在finally块中编写无论是否发生异常都要执行的代码。

以下是try-catch-finally块的基本语法:

try {// 可能引发异常的代码
} catch (error) {// 异常处理逻辑
} finally {// 最终执行的代码
}

二、抛出异常

JavaScript中,我们可以使用throw语句手动抛出异常。throw语句接受一个异常对象作为参数,可以是内置的Error对象或自定义的对象。抛出异常后,代码的执行将立即停止,并跳转到最近的catch块。

以下是抛出异常的示例代码:

function divide(a, b) {if (b === 0) {throw new Error("除数不能为零");}return a / b;
}try {var result = divide(10, 0);console.log(result);
} catch (error) {console.log("捕获到异常:" + error.message);
}

三、捕获异常

catch块中,我们可以访问捕获到的异常对象,并根据需要执行适当的处理逻辑。异常对象包含有关异常的信息,例如错误消息和堆栈跟踪。

以下是捕获异常的示例代码:

try {var result = divide(10, 0);console.log(result);
} catch (error) {console.log("捕获到异常:" + error.message);
}

四、其他相关知识点

1、多重catch块
多重catch块允许我们根据不同类型的异常来执行不同的处理逻辑。在try块中,我们可以使用多个catch块来捕获不同类型的异常,并分别处理它们。

try {// 可能会引发异常的代码
} catch (error1) {// 处理 error1 类型的异常
} catch (error2) {// 处理 error2 类型的异常
} catch (error3) {// 处理 error3 类型的异常
} finally {// 无论是否发生异常,都会执行的代码
}

在上面的示例中,如果try块中的代码引发了异常,JavaScript会按照catch块的顺序检查异常类型,并执行与匹配的catch块关联的代码块。如果没有匹配的catch块,异常将被传递到上一级的异常处理程序。

2、全局异常处理

全局异常处理是一种在应用程序的整个范围内捕获和处理异常的方法。通过在window对象上注册一个全局的错误处理函数,我们可以捕获未被任何try-catch块处理的异常,并执行相应的处理逻辑。

window.onerror = function(message, url, line, column, error) {// 处理全局异常的代码
};

在上面的示例中,当发生未被捕获的异常时,onerror函数将被调用,并传递异常的相关信息。我们可以在该函数中编写逻辑来记录错误、发送错误报告或执行其他自定义操作。

3、自定义异常类型

在JavaScript中,我们可以通过创建自定义异常类型来表示特定的错误或异常情况。通过继承Error对象,我们可以定义自己的异常类型,并添加自定义的属性和方法。

class CustomError extends Error {constructor(message) {super(message);this.name = 'CustomError';}// 自定义方法customMethod() {// 执行自定义逻辑}
}// 抛出自定义异常
throw new CustomError('This is a custom error');

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

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

相关文章

Linux(2):初探

Linux 是什么 Linux 就是一套操作系统。Linux 就是核心与系统呼叫接口那两层。 应用程序不算 Linux。 Linux 提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, 这个架构是沿袭Unix 良好的传统来的,相当的稳定而功能强大。 在 Lin…

CPD:使用restAPI和cpd-cli命令创建DMC实例

环境 Red Hat Enterprise Linux release 8.6 (Ootpa)OCP 4.12.22IBM CP4D 4.8.0Data Management Console 3.1.12 (DMC for CPD 4.8.0) 注:使用了fyre VM。 创建DMC实例 准备 首先export环境变量: . ./stg_env.sh把 cpd-cli 放到PATH里。编辑 ~/.ba…

redis悲观锁和乐观锁

redis悲观锁 Redis加锁命令分有INCR、SETNX、SET 一、INCR锁 key不存在时,key的值会先被初始化为0,其它用户在执行INCR操作进行加一, 如果返回的数大于1,说明这个锁正在被使用当中,通常用在同时只能有一个人可以操作某…

【网络奇遇记】那年我与计算机网络的初相识 —— 网络的体系结构

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. 常见的三种计算机网络体系结构1.1 开放系统互连参考模型1.2 TCP/IP参考模型1.3 原理参考模型 二…

k8s pod常用运维命令

1. 概述 kubectl 命令是操作 Kubernetes 集群的最直接和最高效的途径,熟练掌握命令的使用能起到事半功倍的效果,整理命令有助于加深记忆,该文仅记录关于pod常用的操作运维命令。 2. 查看namespaces 查看k8s集群中目前存在的namespaces kub…

【设计一个缓存--针对各种类型的缓存】

设计一个缓存--针对各种类型的缓存 1. 设计顶层接口2. 设计抽象类 -- AbstractCacheManager3. 具体子类3.1 -- AlertRuleItemExpCacheManager3.2 -- AlertRuleItemSrcCacheManager 4. 类图关系 1. 设计顶层接口 // 定义为一个泛型接口,提供给抽象类使用 public interface Cach…

02-2解析JsonPath

一、jsonpath的安装及使用方式 pip安装 pip install jsonpathjsonpath的使用 obj json.load(open(json文件, r, encodingutf‐8)) ret jsonpath.jsonpath(obj, jsonpath语法)可以参考以下这篇博客进行jsonpath的简单入门JSONPath-简单入门

Centos7安装Redis

1.背景 2.步骤 1.安装gcc依赖 检查是否已安装gcc gcc -v 上图表示已安装,如果没有安装执行如下命令 [rootlocalhost local]# yum install -y gcc 2.下载并解压安装包 [rootlocalhost local]# wget http://download.redis.io/releases/redis-5.0.3.tar.gz [rootlocalhost lo…

《011.SpringBoot之餐厅点餐系统》

《011.SpringBoot之餐厅点餐系统》【界面简洁功能简单】 项目简介 需要源码及数据库的私信… [1]本系统涉及到的技术主要如下: 推荐环境配置:DEA jdk1.8 Maven MySQL 前后端分离; 后台:SpringBootMybatisPlus; 前台:Layuivue; …

SHELL中case的使用

快捷查看指令 ctrlf 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改) shell中的case语句 在shell脚本中,case语句用于匹配一个变量的值。它类似于if语句,…

【python】OpenCV—Image Pyramid(8)

文章目录 1 图像金字塔2 拉普拉斯金字塔 1 图像金字塔 高斯金字塔 在 OpenCV 中使用函数 cv2.pyrDown(),实现图像高斯金字塔操作中的向下采样,使用函数 cv2.pyrUp() 实现图像金字塔操作中的向上采样 import cv2img cv2.imread(C://Users/Administrat…

Mysql中的进阶增删查改操作(二)

联合查询和合并查询 一.联合查询1.内连接2.外链接2.1左外连接2.2右外连接 3.自连接4.子查询5.合并查询 一.联合查询 步骤 1.进行笛卡尔积 2.列出连接条件 3.根据需求再列出其他条件 4.针对列进行精简(可以使用聚合函数) 我们先搭建一个多表查询的框架 这样一个多表查询就搭建出…

基于JAVA SpringBoot和HTML美食网站博客程序设计

摘要 美食网站是一个提供各种美食信息和食谱的网站,旨在帮助用户发现、学习和分享美食。旨在探讨美食网站在现代社会中的重要性和影响。随着互联网的普及,越来越多的人开始使用美食网站来获取各种美食信息和食谱。这些网站不仅提供了方便快捷的搜索功能&…

MySQL8.0学习笔记

1. CMD命令 1.1 数据库启动与停止 (1) 启动数据库:net start mysql80 (2) 停止数据库:net stop mysql80 1.2 数据库连接与退出 (1) 连接数据库:mysql [-hlocalhost -P3306] -uroot -p[123456] // 本地数据库可省略-h -P (2) 退出数据库…

在市场发展中寻变革,马上消费金融树行业发展“风向标”

11月11日,2023金融街论坛年会第三届全球金融科技大会“金融科技创新与合规安全”平行论坛在北京召开。会上,马上消费金融副总经理孙磊就数据对金融的赋能作用、数据安全治理等方面展开了深度讨论。 公开信息显示,马上消费金融是一家经中国银保…

CodeWhisperer--手把手教你使用一个十分强大的工具

Amazon CodeWhisperer 是一款能够帮助我们智能生成代码的工具。经过数十亿行代码的训练,可以根据提示和现有代码实时生成从片段到完整功能的代码建议。类似 Cursor 和 Github Copilot 编码工具。目前,CodeWhisperer 兼容 Python、Java 和 JavaScript&…

Vue 路由props 多路由参数时使用

传统路由参数获取 this.$route.query.id this.$route.query.a this.$route.query.b this.$route.query.c this.$route.query.d this.$route.query.e ......如果参数很多,特别麻烦 第一种接收parpas参数 使用props http.www.csdn.net/123/321 {name: user,path: /us…

mysql数据模型

创建数据库 命令 create database hellox : ( hellox名字) sql语句 创建 数据库 命令 create database hell; 也是创建但是有数据库不创建 命令 create database if not exists hell ; 切换数据库 命令 use hello&…

MacBook 常用快捷键使用

MacBook 常用快捷键使用 官方使用地址: https://support.apple.com/zh-cn/HT201236 commandn 新建 如果QQ要开多个,可以打开QQ后按commandn 又打开一个了 终端 commandn重新打开一个,commandt在当前终端在打个一个选项卡commandw 关闭最前面的窗口…