尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
副队长JavaScript教程(49)-主动抛出异常与错误类型
点此查看所有教程、项目、源码导航文章目录1. 背景2. throw 抛出异常2.1 throw 的作用2.2 基础示例2.3 什么时候需要 throw3. JS 内置错误类型3.1 Error3.2 ReferenceError 引用错误3.3 TypeError 类型错误3.4 RangeError 范围错误4. 异常处理常见坑4.1 不要无脑捕获所有异常4.2 异常尽量就近捕获4.3 区分哪些错误抓不住5. 综合小案例6. 小结1. 背景上一篇我们学习了try catch finally用来捕获代码运行时自动产生的异常。异常不只有 JS 引擎自动抛出这一种情况在开发中很多时候是我们自己判断业务逻辑觉得当前数据不合法需要主动抛出错误提醒调用者。本篇我们学习throw主动抛出异常同时认识 JS 内置的几种错误类型以及异常处理的编码规范。2. throw 抛出异常2.1 throw 的作用throw关键字可以让我们手动制造一个异常。一旦执行throw代码立刻中断抛出的内容会被外层的catch捕获。基础语法throw内容;开发规范尽量抛出错误对象而不是直接抛出字符串、数字。2.2 基础示例varage15;if(age18){thrownewError(年龄不足18岁不允许访问);}console.log(验证通过);直接运行这段代码控制台会报错后面的console.log不会执行。如果外层包上 try-catch就可以接住我们手动抛出的异常varage15;try{if(age18){thrownewError(年龄不足18岁不允许访问);}console.log(验证通过);}catch(err){console.log(捕获到自定义错误,err.message);}2.3 什么时候需要 throw当函数收到不符合预期的参数、条件不满足时适合使用throw。函数只负责校验规则出错的时候抛出异常由调用方决定怎么处理这个错误。functiongetScore(score){if(score0||score100){thrownewError(分数必须在0~100之间);}returnscore;}try{getScore(120);}catch(err){console.log(err.message);}3. JS 内置错误类型我们前面一直用new Error()这是通用错误。JS 还内置了几类细分的错误构造函数用来区分不同种类的问题。3.1 Error通用错误类型其他错误类型都继承自它。不确定具体错误类型的时候优先使用它。thrownewError(通用错误提示);3.2 ReferenceError 引用错误访问一个没有定义的变量时引擎抛出的就是这个类型。我们自己抛的时候适合标记 “找不到变量 / 标识” 这类场景。thrownewReferenceError(该变量不存在);3.3 TypeError 类型错误变量的类型不符合预期就适合用这个。比如期待是数字传进来却是字符串期待是函数传进来是对象。varnumabc;if(typeofnum!number){thrownewTypeError(参数必须是数字类型);}3.4 RangeError 范围错误数值超出合法范围时使用。functionsetCount(n){if(n0){thrownewRangeError(数量不能是负数);}}补充还有 SyntaxError 语法错误这个是解析阶段产生的代码没执行完就报错try-catch 无法捕获我们一般不会手动 throw 这个类型。4. 异常处理常见坑4.1 不要无脑捕获所有异常不要为了程序不报错随便给一大段代码套上 try-catch。// 不推荐try{// 一大段很多逻辑}catch(e){}空 catch 会悄悄吃掉所有错误代码出问题的时候没有任何提示调试非常困难。4.2 异常尽量就近捕获哪里容易出错就在哪里加 try-catch不要所有错误都堆在最外层统一捕获不利于定位问题。4.3 区分哪些错误抓不住语法错误少写括号、少写分号、关键字写错属于解析阶段错误JS 还没开始执行代码try-catch 不起作用。try-catch 只能捕获运行时抛出的异常包括引擎自动抛出、我们 throw 手动抛出的。5. 综合小案例结合 throw try-catch TypeError 写一个参数校验的示例functioncalcArea(width,height){if(typeofwidth!number||typeofheight!number){thrownewTypeError(宽和高必须是数字);}if(width0||height0){thrownewRangeError(宽高必须大于0);}returnwidth*height;}try{varrescalcArea(-10,20);console.log(面积,res);}catch(err){console.log(错误类型,err.name);console.log(错误信息,err.message);}6. 小结throw用来主动抛出异常中断代码执行配合 try-catch 实现自定义错误提示推荐抛出错误对象new Error()不建议直接抛出字符串内置错误Error、ReferenceError、TypeError、RangeError不同场景选择对应的类型编码原则不滥用 try-catch、禁止空 catch 吞掉错误、语法错误无法被捕获。
RELATED

相关推荐

副队长JavaScript教程(48)-异常处理基础

副队长JavaScript教程(48)-异常处理基础

点此查看 所有教程、项目、源码导航 文章目录1. 背景2. 异常是什么3. try catch finally 基础语法3.1 try3.2 catch3.3 finally4. 错误对象 err 的常用属性5. 典型实战场景:调用不存在的函数6. 重要注意点7. 小结1. 背景 前面我们写的 JS 代码,都是预期…

📅 2026/10/27 18:17:33
TFLite Micro Introduce

TFLite Micro Introduce

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/27 18:17:33
副队长JavaScript教程(47)-对象的原理与内存模型、Object 与 null

副队长JavaScript教程(47)-对象的原理与内存模型、Object 与 null

点此查看 所有教程、项目、源码导航 文章目录1. 背景2. JS 对象的基本原理与内存存储模型2.1 对象的本质2.2 JS 的两块内存:栈内存、堆内存2.3 简单类型存储演示2.4 对象(引用类型)存储演示2.5 怎么真正复制一个独立的对象2.6 属性的增删改查…

📅 2026/10/27 18:17:33
MORE NEWS

更多资讯

📰

帆软发布2026年中小企业CRM行业报告:客户管理正走向经营一体化

2026年,中小企业客户关系管理(CRM)系统的选型逻辑正在发生变化。相比单纯记录客户信息、跟踪销售进度,企业越来越关注 CRM 能否连接合同、订单、回款及售后服务,实现跨部门经营协同。 近日,帆软数据应用研…

📰

2026 ERP系统哪个好用?用户体验、功能深度、实施服务三维度综合评测

企业选ERP,最常听到的一句话是“买之前看功能,买之后看落地”。功能演示时觉得哪家都好,真正上线后才发现,员工用不用得顺手、系统能不能跟着业务变、出了问题谁来兜底,才是决定一套ERP是资产还是负担的关键。 选ERP的…

📰

高可用之路-观测篇-那些年遇到过的指标幻觉

高可用之路-观测篇-那些年遇到过的指标幻觉 前言 当前AI的长程链路推导已经非常强大。一旦让Codex/CC接入可观测性平台,它能够非常好的利用工具进行各种组合获取相应的数据来得到问题根因(RCA)。但笔者遇到过的很多问题往往是在一些很反直觉的地方,无法…

📰

Transformers 5.19.0 源码阅读:AutoTokenizer.decode() 原生批处理与 BPE 空格清理陷阱

以下是基于 transformers 5.19.0 源码编写 源代码: def decode(self,token_ids: int | list[int] | list[list[int]] | np.ndarray | torch.Tensor,skip_special_tokens: bool False,**kwargs, ) -> str | list[str]:"""Converts a sequence of …

📰

InnoDB 为什么选 B+ 树:B 树、哈希、跳表、LSM 五种结构横向对比

前阵子参加一个技术选型评审,讨论新业务的存储方案。有人提议:「用 TiKV 吧,底层 RocksDB,写入吞吐是 MySQL 的十倍。」另一个人反问:「那为什么不直接上 Redis?哈希 O(1),比什么树都快。」第三…

📰

证券业三重拐点:并购、智能体、监管底座——首席架构师眼里的分水岭

引子:看上去是三件事,其实是一件十月的这三个星期,证券圈发生的事情,密度有点不像话。10 月 19 日,东兴证券、信达证券两只股票同一天从 A 股摘牌,两家公司的资产、业务、人员、牌照,一起装进中…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬