尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
JavaScript 的错误处理——程序出错时该怎么办
引言没有人能写出永远不出错的代码。真正区分水平的不是谁不出错而是出错之后怎么办。错误处理做得好程序能优雅降级、给出有用提示、快速定位问题做得差用户看到白屏开发者对着日志发呆。这篇文章不带代码把 JS 的错误处理讲清楚。一、错误是什么错误是程序在执行过程中遇到的非正常情况。它可能来自代码本身写错了比如访问了不存在的属性也可能来自外部环境比如网络断了、用户输入了非法内容。错误分两类。一类是语法错误代码还没运行就被检查出来了根本执行不了。另一类是运行时错误代码能跑起来但跑到某一行出了问题。还有一类不算严格意义的错误叫异常通常指可以预料、可以处理的问题。比如请求超时、文件不存在。这类问题不该让程序崩溃而应该被捕获、被处理。二、不处理会怎样默认情况下一个未处理的错误会让当前执行流程直接中断。在浏览器里如果错误发生在页面渲染过程中可能导致部分内容显示不出来。如果发生在事件处理里这个交互就失效了。更糟的是有些错误会中断后续所有逻辑用户看到的是一个卡死的页面。在服务器端未处理的错误可能导致整个服务进程退出影响所有用户。所以错误处理不是锦上添花而是保障程序稳定运行的基本要求。三、捕获错误的基本思路JS 提供了一套捕获机制核心思想是把可能出错的代码包起来出了问题就跳到专门的善后逻辑而不是让程序崩溃。这套机制分几个部分。尝试执行的代码放在一个块里一旦出错控制权立刻转移到处理块处理块里可以做补救、记录日志、给用户提示。无论是否出错最后还可以有一个收尾块用来做清理工作。这种结构的好处是正常的逻辑和出错的逻辑分开写代码更清晰也不会因为一个错误就让整个函数失效。四、错误对象里有什么捕获到的错误通常是一个对象里面包含一些有用信息。最重要的是错误信息描述了出了什么问题。还有错误类型说明是哪一类错误。以及调用栈记录了错误发生时函数是怎么一层层调用的。调用栈尤其有价值。它像一张路线图告诉你错误从哪来、经过了哪些函数。排查问题时顺着调用栈往下看往往能迅速定位到根源。五、主动抛出错误除了被动等待错误发生我们还可以主动抛出错误。什么时候需要主动抛当检测到不符合预期的输入或状态时。比如一个函数要求参数必须是正数传进来负数与其让它默默算出一个错误结果不如直接抛出错误让调用者知道出了问题。主动抛错的好处是尽早暴露问题。错误越早被发现修复成本越低。如果让它悄悄传递下去可能到很远的地方才爆发那时候排查就难了。抛错时可以自定义错误信息也可以使用不同类型的错误方便上层分类处理。六、异步代码中的错误异步代码的错误处理比同步代码麻烦。因为异步任务的执行时机不确定它出错时可能已经不在原来的调用栈里了。传统的捕获机制只能包住同步部分管不到异步回调里发生的错误。针对这个问题不同阶段有不同的解决方案。早期的回调模式约定用回调的第一个参数传递错误调用者必须每次都检查。后来的 Promise提供了专门的失败处理通道可以链式地在末尾统一捕获。再后来的异步函数写法可以直接用同步的捕获机制来处理异步错误心智负担大大降低。理解这条演进线你就知道为什么现代 JS 推荐用异步函数写法因为它让错误处理回归简单。七、错误处理的常见误区第一个误区捕获了却什么都不做。这样错误被吞掉了问题依然存在只是更难发现。捕获之后至少应该记录日志。第二个误区捕获范围过大。把一大段代码全包进去出了问题根本不知道是哪一行。应该尽量缩小捕获范围只包真正可能出错的部分。第三个误区用错误处理代替正常逻辑。有些情况是正常分支不是错误。比如用户没填某个可选字段这是正常的不该当成错误处理。滥用错误处理会让代码难以理解。第四个误区不区分错误类型。所有错误一视同仁地处理可能掩盖了真正需要关注的问题。应该根据错误类型做不同应对。八、总结错误处理的目标不是消灭错误而是让程序在出错时依然可控。理解错误的来源和分类掌握捕获、抛出、异步处理的机制避开常见误区你写的程序才能从能跑升级到可靠。这是工程能力的重要体现也是从写 Demo 到做产品的必经之路。
RELATED

相关推荐

Day3:结构化输出

Day3:结构化输出

在LangChain中,聊天模型提供了额外的功能:结构化输出。一种使聊天模型以结构化格式(例如JSON)进行响应的技术。例如,可能希望将模型输出存储在数据库中,并确保输出符合数据库模式。这种需求激发了结构化输出的概念,其中可以指示模…

📅 2026/10/15 4:02:51
API 权限验收:用 Python 检查白名单配置,再验证允许与拒绝

API 权限验收:用 Python 检查白名单配置,再验证允许与拒绝

一个服务从门户目录消失后,持有旧链接或 API 凭证的程序还能不能调用它?只看页面,回答不了这个问题。目录控制的是展示;凭证的调用范围,需要由服务端鉴权并通过受控请求验证。 本文给出一个只依赖 Python 标准库的离线…

📅 2026/10/15 4:02:51
离散元分析(DEM)和机器学习(Machine Learning, ML)

离散元分析(DEM)和机器学习(Machine Learning, ML)

文章目录1. 机器学习辅助2PFV-DEM参数标定2. GNN DEM:最值得作为创新点3. AI预测非饱和土土水特征曲线4. 深度学习识别SEM/MIP细观结构 → DEM胶结模型5. 论文最推荐的AI路线第一阶段第二阶段第三阶段(创新)第四阶段最终可以形成的论文题目方…

📅 2026/10/15 3:57:51
MORE NEWS

更多资讯

📰

PS5实用优化手册:屏幕、网络、外设与存储的适配

看到“AnyPS5”这个题目,我先说个结论:它不是系统级破解,也不是什么魔改固件的黑话。我花了三周时间,把手里这台PS5从头到脚折腾了一遍,最后得出的理解是——所谓“Any”,指的是一台主机在任何日常条件不算…

📰

浅析Tarjan:从强连通分量到割点桥的图论算法全解析

“浅析 Tarjan”——这标题一看就是算法老手写给新手的作战笔记。熟悉图论的人都知道,Tarjan 这个名字几乎等价于“强连通分量”“割点”“桥”“最近公共祖先”,一个基于深度优先搜索的框架,把一堆看起来毫不相干的图论问题统一收编。你要是…

📰

GitHub Trending日榜拆解:三个值得深挖的开发者工具

晚上十一点多,我照例点开 GitHub Trending,把 2026-10-12 的日榜从头到尾过了一遍。和上周那种清一色“大模型套壳”的场面不太一样,今天榜单里 AI 相关的项目明显退了一截,反而冒出不少针对开发者日常痛点的“小玩意儿”&#xf…

📰

读懂DDR2数据手册:MT47H64M16HR时序参数解析与FPGA配置实战

简介:本资源为美光(Micron)官方发布的MT47H64M16HR DDR2 SDRAM芯片完整数据手册PDF,面向嵌入式系统工程师、硬件开发人员及TI C6455 DSP平台开发者,用于指导该内存芯片的选型、电路设计、时序配置与可靠性验证。手册详…

📰

单片机电容触摸按键实战:从RC充放电到量产参数调优

简介:本资源是一份面向单片机初学者与家电控制开发者的电容感应式触摸按键技术详解文档,聚焦STC系列单片机(如STC12C4052AD)的纯软件实现方案,解决专用芯片成本高、维修难、标准不统一等实际工程痛点。文档深入剖析玻璃…

📰

查询销帮帮产品分类并落入轻易云集成平台:单策略同步实战教程

这个策略解决什么问题在零售与分销一体化的场景里,产品分类是后续商品同步、库存口径、销售统计的「地基」。一次实际项目中,某零售企业同时使用聚水潭管商品、用销帮帮管产品主数据与销售流程。最早他们让两边各自维护一份分类表,结果三个月…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬