【面试题】JavaScript 中 try...catch 的使用技巧 ?
大厂面试题分享 面试题库
前后端面试题库 (面试必备) 推荐:★★★★★
地址:前端面试题库 web前端面试题库 VS java后端面试题库大全
作为一位 Web 前端工程师,JavaScript 中的 try...catch 是我们常用的特性之一。
try...catch 可以捕获代码中的异常并防止应用程序崩溃。但是try...catch 不仅仅是简单地捕获异常。本文我将分享 10 个有用的 try...catch 使用技巧,让你在处理异常时更加得心应手。
1. 捕获所有异常
如果你想捕获代码中所有可能的异常,可以使用一个不带参数的 catch 代码块。例如:
try {// 可能会抛出异常的代码
} catch {// 处理所有异常的代码
}
复制代码
这种方式会捕获所有异常,包括语法错误、运行时错误和自定义错误。但是,在生产环境中使用时,建议具体指定要捕获的异常类型,以便更好地诊断问题。
2. 捕获特定类型的异常
如果你只想捕获特定类型的异常,可以在 catch 代码块中使用条件语句。例如,以下代码块只会捕获 TypeError 异常:
try {// 可能会抛出 TypeError 异常的代码
} catch (error) {if (error instanceof TypeError) {// 处理 TypeError 异常的代码}
}
复制代码
你也可以使用 switch 语句来检查异常类型:
try {// 可能会抛出异常的代码
} catch (error) {switch (error.constructor) {case TypeError:// 处理 TypeError 异常的代码break;case RangeError:// 处理 RangeError 异常的代码break;// ...}
}
复制代码
3. 捕获异步异常
如果你使用了异步代码,你可能需要捕获异步代码中的异常。例如,以下代码块使用 Promise 来异步加载资源:
try {const resource = await fetch("/resource");// 处理资源的代码
} catch (error) {// 处理异常的代码
}
复制代码
如果在异步操作中发生异常,它会被传递到 catch 代码块中。但是,如果你没有使用 try...catch 来捕获异常,它将被视为未处理的异常。
4. 在 finally 代码块中清理资源
如果你使用了一些需要手动清理的资源(例如文件句柄或网络连接),可以在 finally 代码块中进行清理操作。无论 try 代码块中是否发生异常,finally 代码块中的代码都会执行。例如:
let resource;
try {resource = acquireResource();// 处理资源的代码
} catch (error) {// 处理异常的代码
} finally {releaseResource(resource);
}
复制代码
5. 抛出异常
try...catch 不仅可以捕获异常,还可以抛出异常。你可以使用 throw 语句在代码中手动抛出异常。例如:
function divide(a, b) {if (b === 0) {throw new Error("除数不能为零");}return a / b;
}
复制代码
如果在 divide 函数中 b 的值为 0,则会抛出一个包含错误消息的异常。你可以使用 try...catch 来捕获这个异常并执行相应的操作。
6. 在异常中传递额外信息
在抛出异常时,你可以传递一些额外的信息来帮助调试问题。例如:
function divide(a, b) {if (b === 0) {throw new Error("除数不能为零", { a, b });}return a / b;
}
复制代码
在这个例子中,异常对象包含了除数为零时的 a 和 b 的值。当你捕获这个异常时,你可以访问这些值并进行相应的操作。
7. 将异常重新抛出
有时,在处理异常时,你需要将异常重新抛出以便于更高层次的代码进行处理。你可以使用 throw 语句来重新抛出异常。例如:
try {// 可能会抛出异常的代码
} catch (error) {// 处理异常的代码throw error;
}
复制代码
在这个例子中,异常会被重新抛出并传递到调用函数中进行处理。
8. 捕获错误并忽略它们
有时,在调试代码时,你可能希望暂时忽略一些错误。你可以使用空的 catch 代码块来忽略异常。例如:
try {// 可能会抛出异常的代码
} catch {// 忽略异常
}
复制代码
但是,建议不要在生产环境中使用这种方式。在生产环境中忽略异常可能会导致代码无法预料的行为。
9. 使用 Promise.catch 方法
如果你使用 Promise 来处理异步代码,你可以使用 Promise.catch 方法来捕获异常。例如:
fetch("/resource").then((response) => response.json()).then((data) => {// 处理数据的代码}).catch((error) => {// 处理异常的代码});
复制代码
在这个例子中,如果 fetch 或 json 方法返回异常,它们会被传递到 catch 方法中进行处理。
10. 使用 window.onerror
最后一个技巧是使用 window.onerror 来全局捕获异常。当页面中发生未处理的异常时,window.onerror 会被调用。你可以在 window.onerror 中记录异常信息,以便于在生产环境中诊断问题。例如:
window.onerror = function handleError(message, source, lineno, colno, error) {// 记录异常信息
};
复制代码
在这个例子中,当页面中发生异常时,handleError 函数会被调用,并将异常信息作为参数传递进来。你可以在这个函数中记录异常信息并将其发送到服务器以便于分析。
结论
在 JavaScript 中,try...catch 是一个强大的异常处理工具。它可以帮助你诊断和调试代码中的问题,并确保你的代码在运行时能够处理异常情况。通过掌握这 10 个使用技巧,你可以更好地使用 try...catch 并编写出更健壮的代码。
大厂面试题分享 面试题库
前后端面试题库 (面试必备) 推荐:★★★★★
地址:前端面试题库 web前端面试题库 VS java后端面试题库大全
相关文章:
【面试题】JavaScript 中 try...catch 的使用技巧 ?
大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 作为一位 Web 前端工程师,JavaScript 中的 try...catch 是我们常用的特性之一。…...
Java 命名格式规范
Java 命名格式规范 概述 简洁清爽的代码风格应该是大多数开发工程师所期待的。在编码过程中笔者常常因为起名字而纠结,夸张点可以说是编程 5 分钟,命名两小时!究竟为什么命名成为了编码中的拦路虎。 每个公司都有不同的标准,目…...
【C++】STL中的容器适配器 stack queue 和 priority_queue 的模拟实现
STL中的容器适配器 一、容器适配器1、什么是容器适配器2、STL标准库中的容器适配器 二、stack的模拟实现1、stack的简单介绍2、栈的模拟实现 三、queue的模拟实现1、queue的简单介绍2、queue的模拟实现 四、priority_queue的模拟实现1、priority_queue的简单介绍2、priority_qu…...
MongoDB 聚合管道中使用算术表达式运算符
算术表达式运算符主要用于实现数字之间的算术运算,主要包含了对加、减、乘、除、余数、截取、舍入等算术操作。 下面我们进行详细介绍: 一、准备数据 初始化商品数据 db.goods.insertMany([{ "_id": 1, name: "薯片", size: &q…...
代码随想录算法训练营第四十三天-动态规划5|1049. 最后一块石头的重量 II , 494. 目标和 , 474.一和零
最后一块石头重量转化为将一个集合分隔成两个集合,两个集合之间的差值最小,就是最后剩下最小的石头重量。这里可以求集合的一个平均值,如果正好等于平均值,说明可以抵消,这时候重量为0,如果不行,…...
《淘宝网店》:计算总收益
目录 一、题目 二、思路 1、当两个年份不一样的时候 (1)from年剩余之后的收益 (2)中间年份的全部收益 (3)to年有的收益 2、同一个年份 三、代码 详细注释版本: 简化注释版本ÿ…...
2023年03月青少年软件编程C语言一级真题答案——持续更新.....
1.字符长方形 给定一个字符,用它构造一个长为4个字符,宽为3个字符的长方形,可以参考样例输出。 时间限制:1000 内存限制:65536 输入 输入只有一行, 包含一个字符。 输出 该字符构成的长方形,长4个字符,宽3个字符。 样例输入 * 样例输出 **** **** ****#include<bi…...
家用洗地机好用吗?好用的洗地机分享
洗地机是一种高效、节能、环保的清洁设备,广泛应用于各种场所的地面清洁工作。它不仅可以快速清洁地面,还可以有效去除污渍、油渍等难以清洁的污染物,让地面恢复光洁如新的状态。同时,洗地机还可以减少清洁人员的劳动强度…...
《分解因数》:质因数分解
目录 一、题目: 二、思路: 三、代码: 一、题目: 分解因数 《分解因数》题目链接 所谓因子分解,就是把给定的正整数a,分解成若干个素数的乘积,即 a a1 a2 a3 ... an,并且 1 < a1…...
(排序10)归并排序的外排序应用(文件排序)
TIPS 在一些文件操作函数当中,fputc与fgetc这两个函数都是针对字符的,如果说你需要往文件里面去放入整形啊等等,不是字符的类型,这时候就用fprintf,fscanf在参数里面数据类型控制一下就可以。但是话说回来,…...
浅谈根号分治与分块
文章目录 1. 根号分治哈希冲突 2. 线性分块引入教主的魔法[CQOI2011] 动态逆序对[国家集训队] 排队[HNOI2010] 弹飞绵羊蒲公英 1. 根号分治 哈希冲突 题目1 n n n 个数, m m m 次操作。操作 1 为修改某一个数的值,操作 2 为查询所有满足下标模 x x x …...
(OpenAI)ChatGPT注册登录常见问题错误代码及其解决方法
在使用 ChatGPT 的时候我们可能会碰到一些错误的代码,本文统一来介绍一下每一种错误以及解决方法。 错误代码1. 不能在当前国家使用 出现场景:一般在注册或登录的时候会出现。 原因:主要是ChatGPT检测到当前访问所在的地区不允许访问导致。 …...
MySQL主从复制、读写分离(MayCat2)实现数据同步
文章目录 1.MySQL主从复制原理。2.实现MySQL主从复制(一主两从)。3.基于MySQL一主两从配置,完成MySQL读写分离配置。(MyCat2) 1.MySQL主从复制原理。 MySQL主从复制是一个异步的复制过程,底层是基于Mysql数…...
Linux 云服务器好用吗?(解读Linux云服务器的特点优势)
如今,云计算越来越受欢迎,许多公司正在将业务转移到那里。企业向云过渡的主要原因是它提供的众多服务,包括安全和充足的存储、数据库、服务器和其他关键元素。 作为相对前|沿的技术之一,云建立在虚拟服务器上。Linux 服务器…...
研读Rust圣经解析——Rust learn-8(match,if-let简洁控制流,包管理)
研读Rust圣经解析——Rust learn-8(match,if-let简洁控制流,包管理) matchother和占位符_区别 easy matchenum matchno valuematch inner Option matchmore better way if-let整洁控制包管理模块(mod)拆分声明modpub公开use展开引用拆解模块结…...
G8期刊《全体育》期刊简介及投稿要求
G8期刊《全体育》期刊简介及投稿要求 《全体育》是由湖南体育产业集团有限公司主管、体坛传媒集团股份有限公司主办、中教体育 出版发行的体育综合性期刊。 主管:湖南体育产业集团有限公司 主办:体坛传媒集团股份有限公司 国内刊号:CN4…...
数据结构和算法学习记录——层序遍历(层次遍历)、二叉树遍历的应用(输出二叉树中的叶节点、求二叉树的高度、二元运算表达式树及其遍历、由两种遍历序列确定二叉树)
目录 层序遍历 思路图解 代码实现 二叉树遍历的应用 输出二叉树中的叶节点 代码实现 求二叉树的高度 思路图解 代码实现 二元运算表达式树及其遍历 由两种遍历序列确定二叉树 层序遍历 层序遍历可以通过一个队列来实现,其基本过程为: 先根…...
【Neo4j数据库】图数据库_Neo4j增加节点(关系)、查询、删除数据库等操作解析(Cypher语句)
【Neo4j数据库】图数据库_Neo4j增加节点(关系)、查询、删除操作解析(Cypher语句) 文章目录 【Neo4j数据库】图数据库_Neo4j增加节点(关系)、查询、删除操作解析(Cypher语句)1. 介绍2…...
Linux移动文件和文件夹(目录)命令
命令mv 英文move 翻译移动 mv命令可以移动文件或文件夹(目录),也可以重命令(覆盖)文件。 1. 移动文件/重命名 单纯地移动某一个文件直接使用: mv <源文件名称/地址> <新文件名称/地址>这个方法…...
Pandas的应用-5
Pandas是一个强大的数据处理库,它提供了高性能、易于使用的数据结构和数据分析工具。本文将介绍Pandas常用的数据结构和常用的数据分析技术,包括DataFrame的应用、窗口计算、相关性判定、Index的应用、范围索引、分类索引、多级索引以及日期时间索引。 …...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
