在JavaScript中创建自定义错误

news2025/1/19 3:43:55

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》

​ 

目录

✨ 前言

✨ 正文

简介

创建自定义错误

自定义错误属性

instanceof 检查类型

自定义错误处理

总结

✨ 结语


✨ 前言

        JavaScript提供了基础的Error对象来表示代码运行时出现的错误。但有时内置的Error对象无法满足我们表示应用程序中特定错误情况的需要。这时我们就可以创建自定义的错误类。

        本文将介绍在JavaScript中如何定义自定义错误,使我们可以更好地管理应用中的异常。我们将学习继承Error的方法、添加自定义属性、以及如何识别和处理自定义错误对象。

✨ 正文

简介

        JavaScript允许我们创建自定义的错误对象,以便更好地表示应用程序中出现的特定错误情况。这比只使用内置的Error对象更有意义。

创建自定义错误

        自定义错误可以通过继承内置的Error对象来创建:

class ValidationError extends Error {
  constructor(message) {
    super(message);
    this.name = "ValidationError";
  }
}

throw new ValidationError("Invalid input");

        这里我们创建了一个ValidationError类,它继承自Error。我们可以设置name属性来定义错误类型,并在构造函数中传入自定义消息。

        这样一来,就可以通过ValidationError类来生成应用程序特定的错误对象了。

自定义错误属性

        错误对象可以携带额外的属性用来保存相关信息:

class ValidationError extends Error {

  constructor(message) {
    super(message);
    this.name = "ValidationError";
    this.details = {
      field: "username", 
      code: 100
    };
  }

}

         这里我们为ValidationError对象添加了一个details属性,用来保存错误的相关详情。

instanceof 检查类型

        可以用instanceof来检查错误对象的具体类型:

try {
  // ...
} catch(err) {
  
  if (err instanceof ValidationError) {
    alert("Invalid input!"); // 处理 ValidationError
  }
  
}

所以实例对象能够保存具体的错误信息。

自定义错误处理

        一旦创建了自定义错误,就可以在catch块针对性地处理:

class ValidationError extends Error {
  // ...
}

try {
  // ...
} catch(err) {

  if (err instanceof ValidationError) {
    alert(`Invalid input: ${err.message}`); 
    return;
  }
  
  throw err;

}

这里如果捕获到一个ValidationError,我们就直接进行处理,否则再次抛出。

这让错误处理更加灵活。

总结

  • 可以通过继承Error并设置name来自定义错误类型。
  • 错误对象可以携带额外属性来保存详情。
  • instanceof可用于判断错误类型。
  • 自定义错误使得错误处理更加灵活。

自定义错误对象是让我们的应用管理错误更加高效的方式。

✨ 结语

        通过创建自定义错误类,我们可以更准确地表示应用中出现的各种异常情况。这可以帮助我们编写出更可靠、可读性更强的代码。正确处理错误是一个qualified JavaScript开发者必备的技能。

        希望本文可以让你对在JavaScript中创建和使用自定义错误有一个全面的理解。将它运用到项目中去,会让代码的错误处理机制更加完善。

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

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

相关文章

C#实现对任意区域任意大小的截图

1,目的: 实现类似系统截图工具那样对屏幕任何区域自定义大小的截图。 2,效果展示: 点击截图 选择需要截图的区域: 区域选择完成后,单击右键完成截图: 在合适的载体上粘贴截图: 3,…

【笔记】顺利通过EMC试验(1-15)-视频笔记

目录 视频链接 P2:电子设备的电磁兼容性要求 P3:怎样分析一个电磁兼容的问题 P4:EMC试验注意事项 P5:骚扰源有什么特征 P6:什么是传导骚扰发射 P7:什么是辐射骚扰发射 P8:环路天线的辐射特性 P9:偶极天线的辐…

QT之 QDebug 调试(一)

在QT中&#xff0c;进行调试&#xff0c;则需要在头文件地方加上 #include <QDebug> 加上之后&#xff0c;在编译之后则其输出的信息则在应用程序输出那里显示信息。 其QDebug 信息调试则如&#xff1a; qDebug() << " 需要插入的信息 "…

【Linux】从C语言文件操作 到Linux文件IO | 文件系统调用

文章目录 前言一、C语言文件I/O复习文件操作&#xff1a;打开和关闭文件操作&#xff1a;顺序读写文件操作&#xff1a;随机读写stdin、stdout、stderr 二、承上启下三、Linux系统的文件I/O系统调用接口介绍open()close()read()write()lseek() Linux文件相关重点 复习C文件IO相…

南京观海微电子---如何减少时序报告中的逻辑延迟

1. 引言 在FPGA逻辑电路设计中&#xff0c;FPGA设计能达到的最高性能往往由以下因素决定&#xff1a; ▪ 工作时钟偏移和时钟不确定性&#xff1b; ▪ 逻辑延迟&#xff1a;在一个时钟周期内信号经过的逻辑量&#xff1b; ▪ 网络或路径延迟&#xff1a;Vivado布局布线后引…

网络服务综合练习

综合练习&#xff1a;请给openlab搭建web网站 网站需求&#xff1a; 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料 和缴费网站&#xff0c;基于&#xff0c;www.openlab.com/data网…

什么是跳表,Java如何实现跳表?

1. 问题引入&#xff0c;相较于有序链表我们为什么需要跳表&#xff1f; 1.1 首先我们需要了解什么是有序链表 如图&#xff1a; 每个链表存在一个指向下一节点的指针&#xff0c;如果我们要对其任一节点进行增删改&#xff0c;都需要先使用迭代器进行查询&#xff0c;找到指…

【数字量采集1.28】数字信号采集

数字量采集-2024年01月27日-二刷 文章目录 分析考虑一个波形的六要素&#xff1a;项目需求分析&#xff1a;高低电平数字量采集电路设计RS485差分信号传输SP3485 芯片引脚RS485 转 TTL 电路 分析考虑一个波形的六要素&#xff1a; 高电平 低电平 上升时间 下降时间 频率/周期 …

Vue2 VS Vue3 生命周期

一、生命周期的概念 Vue组件实例在创建时要经历一系列的初始化步骤&#xff0c;在此过程中Vue会在合适的时机&#xff0c;调用特定的函数&#xff0c;从而让开发者有机会在特定阶段运行自己的代码&#xff0c;这些特定的函数统称为&#xff1a;生命周期钩子&#xff08;也会叫…

【C++中的STL】常用算法3——常用拷贝和替换算法

常用算法3 copyreplacereplace_ifswap 1、 copy容器内指定范围的元素拷贝到另一个容器中 2、 replace将容器内指定的旧元素修改为新元素 3、 replace_if容器内指定范围满足条件的元素替换为新元素 4、 swap互换两个容器的元素 copy 容器内指定范围的元素拷贝到另一个容器中…

布隆过滤器介绍及实战应用(防止缓存穿透)

布隆过滤器介绍 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多&#xff0c;缺点是有一…

最全全国十七个数据入表和资产化案例深度解析

2024年1月1日起&#xff0c;财政部会计司发布的《企业数据资源相关会计处理暂行规定》正式施行&#xff0c;规定为数据资源的会计处理提供了明确的指导原则。这一里程碑事件也标志着我国在数据资产入表领域正式进入实际操作阶段&#xff0c;随后&#xff0c;数据资产入表在全国…

[BJDCTF 2020]Easy

运行之后是这个东西 我们直接IDA暴力打开 结果main函数啥也不是 &#xff08;看其他人的wp知道了照que函数&#xff09; 我也不知道咋找的&#xff0c;可能真要硬找吧 int ques() {int v0; // edxint result; // eaxint v2[50]; // [esp20h] [ebp-128h] BYREFint v3; // [e…

在vscode里面聊微信

### 1、源起 事情是这样的&#xff0c;某天下午&#xff0c;我在做项目的时候被人事叫去谈话&#xff0c;说些有的没得&#xff0c;但是我注意到她说我不要玩微信&#xff0c;“我好几次都看到你在和别人聊微信”之类的话&#xff0c;所以我打算在ide工具的命令行中聊微信&…

聊聊效能与敏捷的差异

这是鼎叔的第八十四篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。 欢迎关注本专栏和微信公众号《敏捷测试转型》&#xff0c;星标收藏&#xff0c;大量原创思考文章陆续推出。 近期&#xff0c;TesterHome社区小道消息播客直播间邀请了鼎叔&#xff0c;与…

程序员的基本素养之——R语言起源、特点以及应用

R语言是一种功能强大的数据分析、统计建模、可视化、 免费、开源且跨平台的编程语言 作为用于数据统计的必备技能语言&#xff0c;博主目前正在对R语言进行基本的学习&#xff0c;这也是生物信息学领域进行统计分析的必备语言之一。下面跟我来一起看看吧&#xff01; R语言是一…

产品解读 | 新一代湖仓集存储,多模型统一架构,高效挖掘数据价值

星环科技TDH一直致力于给用户带来高性能、高可靠的一站式大数据基础平台&#xff0c;满足对海量数据的存储和复杂业务的处理需求。 同时在易用性方面持续深耕&#xff0c;降低用户开发和运维成本&#xff0c;让数据处理平民化&#xff0c;助力用户以更便捷、高效的方式去挖掘数…

【PyTorch】n卡驱动、CUDA Toolkit、cuDNN全解安装教程

文章目录 GPU、NVIDIA Graphics Drivers、CUDA、CUDA Toolkit和cuDNN的关系使用情形判断仅仅使用PyTorch使用torch的第三方子模块 安装NVIDIA Graphics Drivers&#xff08;可跳过&#xff09;前言Linux法一&#xff1a;图形化界面安装&#xff08;推荐&#xff09;法二&#x…

第十三章认识Ajax(四)

认识FormData对象 FormData对象用于创建一个表示HTML表单数据的键值对集合。 它可以用于发送AJAX请求或通过XMLHttpRequest发送表单数据。 以下是FormData对象的一些作用&#xff1a; 收集表单数据&#xff1a;通过将FormData对象与表单元素关联&#xff0c;可以方便地收集表…

【GitHub项目推荐--建一个 ChatGPT 机器人】【转载】

建一个 ChatGPT 机器人 bot-on-anything 它可以将 ChatGPT 等算法模型应用于各类平台。目前&#xff0c;它已经可以接入到个人微信、公众号、QQ、Telegram、Gmail邮箱、Slack 等待&#xff0c;并计划接入Web、企业微信、钉钉等。 通过使用该开源项目&#xff0c;开发者可以通…