当前位置: 首页 > 科技观察

JavaScript中的错误:为什么优先考虑这些错误?

时间:2023-03-12 17:40:59 科技观察

本文转载自公众号《核心阅读》(ID:AI_Discovery)。事情并不总是如他们所愿。当出现问题时,我们会通过错误得到通知。任何开发人员都应该熟悉错误的概念。前端开发人员必须熟悉Web应用程序运行时在浏览器控制台中通知错误的红色文本警报。错误术语和异常处理机制术语在编程中经常使用,但它们通常可以互换使用。笔者认为错误是JavaScript引擎抛出的,异常处理机制是开发者抛出的。但这种情况可能不会出现在Java编程语言中。在Java中,错误是未经检查的类型,在运行时出现;异常处理机制可以出现在运行时或编译时。JavaScript中的错误类型作为一种动态类型的语言,JavaScript在运行前不会对类型错误进行警告。错误可以进一步分类,尽管它们通常被分配给JavaScript中的Error对象。这些分支继承了Error对象的特性。EvalError:表示在使用全局函数eval()时抛出的错误。InternalError:表示由于内部错误而由JavaScript引擎抛出的错误。一个经典的例子:“太多的递归方法”或者太大的东西。RangeError:表示值超出范围时抛出的错误。ReferenceError:表示无法取消引用变量时抛出的错误。换句话说,无法找到或访问引用的变量。SyntaxError:表示由于语法输入无效而无法解释给定代码的JavaScript引擎抛出的错误。新手经常会遇到这样的错误。TypeError:通常表示在操作中使用了无效的数据类型而抛出的错误,导致操作指令无法执行。URIError:表示函数encodeURI()或decodeURI()接收无效参数抛出的错误。什么是错误处理?程序通常包括两种主要类型的问题,程序员错误和精度问题。程序员错误是指程序员在编写代码时做了愚蠢的事情,例如忘记使用正确的变量。精度问题是客观因素造成的,比如网速慢导致数据库连接失败。第一类问题可以通过查找和修复来解决,而第二类问题只能通过预防或主动措施来解决。这意味着在编写代码时考虑到最坏的可能性并优雅地处理它们。这可以是发生任何性质的错误时要采取的一般操作,也可以是针对特定错误类型要采取的特定操作。这种防御措施称为错误处理。为什么要首先处理错误?为了理解为什么错误处理很重要,让我们想象以下场景:如果错误处理不当会发生什么?想象一个部署了网络但未安装错误处理的应用程序。有很多开发人员没有预料到的错误。以用户尝试上传格式错误的文件为例。如果不提前处理这种情况:文件上传失败。用户无从知晓失败原因(除非能打开浏览器控制台一探究竟)用户以后很可能因为以上问题不再访问网站作为开发者,你无从知晓原因程序在这种特殊情况下停止工作如果错误处理得当,上述许多问题都不会出现。“妥当”是指发生错误时采取适当的处理方式。程序员处理错误,但他们没有“正确地”处理错误,这是Web应用程序存在的问题之一。许多网站通常会在发生错误时显示错误消息。这应该是最后的手段,但大多数没有经验的开发人员会首先采用这种方法。理想的做法是用适当的处理方法来处理每个错误,而不是治标不治本。在真实的上下文中,并不是所有可能的上下文都可以在特定的用户体验中考虑。但有时,将特定错误通知用户可能不是一个好主意,因为这对普通用户来说太复杂了。在这些情况下,可以向用户提供错误代码,用户将代码发送给客户服务团队,客户服务团队可以参考错误代码指导合适的用户。错误处理对于错误记录至关重要,因为如果不先处理错误,就无法记录错误。在我看来,每个开发人员都需要精通错误日志记录。错误处理方法下面列出了JavaScript中的错误处理方法。有些是同步的,有些是异步的。(1)try-catchtry-catch方法运行代码块语句并“捕获”代码块抛出的任何错误。如果代码语句运行时发生错误,代码执行流程将停止并移至catch块中的语句,以便可以适当地处理这些错误。try-catch块可用于处理同步和异步代码。try{console.log(unknownVariable);}catch(error){console.log(error);//ReferenceError:unknownVariableisnotdefined}(2)Promisecatch引入Promise让JavaScript焕然一新。当Promise抛出错误时,我们可以使用catch方法来处理错误。这类似于try-catch方法,但是这个方法中没有try块。(3)回调错误在传统的NodeAPI中,回调用于处理响应和错误。通常,回调的模式是callback(err,res),其中只有“err”或“res”是非空值。如上所示,如果async函数失败,err参数将收到一个错误,应适当处理。(4)错误事件这是NodeJS中常见的事件处理方式,当错误发生时会触发错误事件。由于端口80是HTTP的默认端口,因此上面的代码片段无法创建服务器并因此抛出错误。(5)onerrorHTML元素包含一些事件,例如onclick、onchange等。onerror事件在DOM元素抛出错误时触发。此外,每当JavaScript发生错误时,window对象就会触发onerror事件。window.onerror=function(message,source,lineno,colno,error){//handleerror};element.error=function(event){//handleelementerror)错误边界——React中的错误边界允许JavaScript错误显示在直观的视图结构,不会向用户显示损坏的UI。这些React组件可以简单地通过定义一个名为componentDidCatch(error,info)的全新生命周期方法来创建。错误处理是编程的重要组成部分,要构建高效的应用程序,您需要认真对待它。