首页 > 编程语言 >【转】[JavaScript] try...catch 语法

【转】[JavaScript] try...catch 语法

时间:2025-01-21 14:55:06浏览次数:1  
标签:... 错误 捕获 try error catch

转自:kimi.ai

在 JavaScript 中,try...catch 是一种用于捕获同步错误的语法结构。它允许你尝试执行一段代码,并在代码运行过程中捕获可能出现的异常(错误),从而避免程序因为未处理的错误而崩溃。通过 try...catch,你可以对错误进行处理,例如记录错误信息、提供默认值或执行替代逻辑。

基本语法

JavaScript复制
try {
    // 尝试执行的代码
} catch (error) {
    // 捕获错误后执行的代码
} finally {
    // 可选的 finally 块,无论是否捕获错误都会执行
}

关键部分

  1. try 块:包含可能会抛出错误的代码。如果代码中出现错误,JavaScript 引擎会暂停执行 try 块中的剩余代码,并跳转到 catch 块。
  2. catch 块:用于捕获错误并处理。catch 块会接收一个参数(通常命名为 error),它包含了错误对象。你可以通过这个对象获取错误信息,例如 error.message
  3. finally 块(可选):无论是否捕获到错误,finally 块中的代码都会执行。它通常用于清理资源,例如关闭文件流、释放锁等。

示例

1. 基本用法:捕获错误并处理

JavaScript复制
try {
    console.log("开始执行代码...");
    // 故意制造一个错误:访问未定义的变量
    console.log(undefinedVariable);
} catch (error) {
    console.error("捕获到错误:", error.message);
} finally {
    console.log("无论是否捕获错误,finally 块都会执行。");
}
输出: 复制
开始执行代码...
捕获到错误: ReferenceError: undefinedVariable is not defined
无论是否捕获错误,finally 块都会执行。

2. 使用 try...catch 处理 JSON 解析错误

JavaScript复制
const jsonString = '{"name":"Alice","age":25';

try {
    const data = JSON.parse(jsonString);
    console.log("解析成功:", data);
} catch (error) {
    console.error("解析失败:", error.message);
}
输出:

解析失败: Unexpected end of JSON input

3. 使用 try...catch 处理异步错误(不推荐)

try...catch 只能捕获同步错误。如果你在异步代码中使用它,可能无法捕获错误。例如: JavaScript复制
try {
    setTimeout(() => {
        throw new Error("异步错误");
    }, 100);
} catch (error) {
    console.error("捕获到错误:", error.message); // 这里不会捕获到错误
}
输出:

Uncaught Error: 异步错误

对于异步错误,建议使用 Promise.catch() 方法或 async/await 中的 try...catch

4. 使用 try...catch 在 async/await 中捕获错误

JavaScript复制
async function fetchData() {
    try {
        const response = await fetch("https://api.example.com/data");
        const data = await response.json();
        console.log("获取数据成功:", data);
    } catch (error) {
        console.error("获取数据失败:", error.message);
    }
}

fetchData();

5. 自定义错误处理逻辑

你可以根据错误类型或错误信息,执行不同的处理逻辑: JavaScript复制
try {
    // 故意制造一个错误
    throw new Error("自定义错误");
} catch (error) {
    if (error.message === "自定义错误") {
        console.log("这是一个自定义错误");
    } else {
        console.error("其他错误:", error.message);
    }
}
输出:

这是一个自定义错误


注意事项

  1. 只捕获同步错误:try...catch 只能捕获同步执行代码中的错误。对于异步代码(如 setTimeoutPromise),需要使用其他方式(如 .catch()async/await)来捕获错误。
  2. 不要滥用 try...catch:虽然 try...catch 可以捕获错误,但并不是所有错误都需要被捕获。过度使用可能会掩盖代码中的问题。
  3. finally 块的作用:finally 块无论是否捕获到错误都会执行,适合用于清理资源或执行必要的操作。
  4. 错误对象的属性:捕获的错误对象通常包含以下属性:
    • error.message:错误的描述信息。
    • error.name:错误的类型(如 ReferenceErrorTypeError 等)。
    • error.stack:错误的调用栈信息,有助于调试。

总结

try...catch 是 JavaScript 中处理同步错误的重要工具。它可以帮助你捕获和处理运行时错误,从而提高代码的健壮性和用户体验。正确使用 try...catch 可以避免程序崩溃,并提供更友好的错误处理逻辑。

标签:...,错误,捕获,try,error,catch
From: https://www.cnblogs.com/z5337/p/18683585

相关文章

  • B站大瓜!员工滥用权限,写恶意代码攻击用户,竟然是因为...
    B站最近瓜不少!又是操作直播间抽奖概率,最近又爆自家员工滥用权限,在用户使用网页端时,使特定用户弹出“您的账号已被封禁”。事实上这是一个定向攻击,当这些用户点击视频时,页面会突然跳转到一个空白页面,并弹出“您的账号已被封禁”的提示。尽管账号并未真正被封禁,但这种操作对企......
  • [每日 B] Kevin and Geometry
    前言想着能做的题也不多,直接当每日一练的形式写就好了心态放平,冷静利用时间思路转化题意考虑一个等腰梯形的性质朴素的想法是,枚举\(b\),枚举\(c<b\),然后计算是否有对应的\(a\)满足\(\existsa,\existsa+2c\),特判\(c=0\)这样直接爆炸,考虑优......
  • [ARC 188A] ABC Symmetry
    solutionbyXiangXunYi思路推导step1首先题目中操作二同时删掉A,B,C的条件相当于同时将三者数量减一,操作一删掉两个相同字符等同于将某一字符的数量减二,那么我们可以发现只使用操作一不会改变奇偶,操作二则是同时反转奇偶,所以一个字符串是个好字符串的必要条件是其中三个字母......
  • 【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍DERT中匈牙利
    【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍DERT中匈牙利匹配算法的具体流程?【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍DERT中匈牙利匹配算法的具体流程?文章目录【大厂面试AI算法题中的知识点】方向涉及:ML/DL/C......
  • 错失一个亿,支付宝 P0级事故,整整5分钟......网友戏称:错过的羊毛犹如砒霜
    今日份碎碎念:就在昨日下午,支付宝突然出现了一起“重大意外事件”,不晓得大家有没有在网络上刷到相关消息?简单来讲,在昨天下午14:40至14:45这短短5分钟的时段里,当用户在进行转账、购物、购票、还款等各类操作时,在订单支付页面均出现了“政府补贴”的提示,且显示减免优惠......
  • 专升本数据结构看这一篇就够了!(重要章节已更新完毕,持续更新中...)
    重点章节已更新完毕,其他章节持续更新中,最新版本可以查看语雀考前须知考核形式:闭卷笔试,不能使用电脑编程试题类型:填空、选择、判断、简答、算法设计成绩占比:按章节:25%:绪论,串,数组和广义表,排序75%:线性表,栈和队列,树和二叉树,图,查找按能力:30%:识记......
  • 嵌入式_相关英文(不定时更新...)
    一、在嵌入时准备阶段、linux基础时接触的专业英文(1)知识点中的单词Crack:破解,裂开virtualmachine:虚拟机terminal:终端,站台Permissiondenied:权限不允许password:密码remove:删除regular:普通的necessary:必须的catch:抓取omitting:省略,遗漏insert:插入wave:保存quit:退......
  • 211本硕二战腾讯大模型算法岗,已凉......
    01背景本弱鸡211本硕,nlp,无论文有实习(老板没资源且放养),本科有acm经历(1铜),面试pcg日常实习。02技术一面(时长1h)Q1:了解什么机器学习算法,讲一下原理?当时只记得实体识别用到了隐马尔可夫模型,讲了讲怎么怎么定义观测状态和隐藏状态、前向传播、解码和应用场景。Q2:讲一......
  • 使用拓扑键实现拓扑感知的流量路由和CPU拓扑感知调度 Cilium 1.11 发布,带来内核级服务
    https://kubernetes.io/zh-cn/docs/concepts/services-networking/topology-aware-routing/https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/topology-aware-cpu-schedulinghttps://kubernetes.p2hp.com/docs/concepts/services-networking/servi......
  • 使用try-with-resource实现自动解锁
    背景项目中使用Redission分布式锁,每次使用都需要显示的解锁。很麻烦,Java提供了try-with-resources语法糖,它不仅可以用于自动关闭流资源,还可以用于实现自动解锁。本文将介绍如何利用try-with-resources实现锁的自动释放,并通过代码示例来演示其应用。什么是try-with-resour......