Javascript中的错误和异常有啥区别?

Posted

技术标签:

【中文标题】Javascript中的错误和异常有啥区别?【英文标题】:What's the difference between Error and Exception in Javascript?Javascript中的错误和异常有什么区别? 【发布时间】:2013-04-15 02:06:21 【问题描述】:

似乎ErrorException 是同一个东西:它们都可以用throw 语句抛出并用try catch 块捕获。

【问题讨论】:

一点点谷歌搜索永远不会出错,java67.blogspot.nl/2012/12/… ""exceptions" 是指可以捕获和控制的错误(运行时)。与只是语法错误并完全破坏编译器的“错误”相反......“ - forums.digitalpoint.com/threads/… 【参考方案1】:
try 
    throw "throwing string";
 catch (ex) 
    console.log(ex);

如果我们运行此代码,我们将观察到 catch 子句将使用 throw 接收 无论我们抛出什么关键词。这意味着如果我们抛出字符串,我们将收到字符串,如果我们抛出对象,我们将收到对象,如果我们抛出数字,我们将收到数字。

注意:所以如果我们抛出错误,我们将收到错误。

因此结论是我们使用 throw 关键字 抛出的任何东西都将被视为异常。如果我们不捕捉(或处理)它,那么我们的 javascript 代码就会崩溃。

【讨论】:

【参考方案2】:

JavaScript 语法

错误和异常在 JavaScript 中是语法上的同义词。该语言仅实现Error 关键字(通过window.Error)。您可以使用Error.constructor 定义自定义错误,它以namemessage 作为参数。

JavaScript 错误

还有行号糖可用于跟踪代码中出现的错误。 JavaScript 只有Error。无论您听到人们谈论的是 Exceptions 还是 Errors,在 JavaScript 中他们指的是同一个东西。

浏览器会做出区分:ReferenceError(当访问一个名称在堆中不存在的变量时,或者当你打错字时(更多 here.),TypeError 也是一个已知的 JS错误,更多here。

JavaScript 异常

已知的 JavaScript ExceptionDOM Exception 8。当您访问未准备好的对象时会发生这种情况,例如尚未完成请求的XMLHttpRequest

实施

当使用try catchtry catch finally 块时,您将同时处理JavaScript ExceptionError。代码方面的差异没有影响。

在幕后,浏览器使用相同的window.ErrorconstructorException 是带有 namemessageError 实例,其中包含“异常”。

试试:var myCustomError = new Error("myException", "An exception occurred.");。 “异常”是字符串中的文本。更多关于Errorhere。

约定

按照惯例,ErrorException 之间是有区别的。 Error 表示明显违规。 TypeErrorReferenceError 表示您未遵循语言规范。

当您在完成之前访问XMLHttpRequest 响应时,将引发ExceptionError 是“你违反了法律”的呼喊,Exception 是“快到了!”垫在肩上。希望类比有所帮助!

【讨论】:

一个让我印象深刻的细微差别是 DOMException 的 message 属性是只读的,而我看到的所有其他错误都有一个可写的 message 属性。可能还有更多是只读的,我只是没遇到过。 惯例位是我不同意的。【参考方案3】:

基于lecture,错误由JavaScript引擎抛出,异常由开发者抛出。它只是命名约定。

JavaScript 抛出错误 开发者抛出异常

在技术方面是相同的结构(事物)。

【讨论】:

那是清脆的 :) 我不认为 W3schools 是最可信或最权威的来源 - 并且它没有说明任何理由来证明这个答案。【参考方案4】:

我认为错误是您不应该尝试捕捉的严重错误 异常是应该被捕获的东西,只要可以处理它。

错误是指代码中出现错误或无效的情况。它可能会导致内存错误,这是不应该发生且无法处理的事情。

而当代码中满足某些条件时,异常会抛出一些东西。它可能与真正的错误不对应。

【讨论】:

以上是关于Javascript中的错误和异常有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

PHP:异常和可捕获的致命错误有啥区别?

java中错误(error)和异常(exception)有啥主要区别?

java语言中error和exception有啥区别?final和finally有啥区别?

java中错误(error)和异常(exception)有啥主要区别?

JS中Try...Catch和onerror有啥区别?

JavaScript中的children和childNodes有啥区别?