ES6 - 错误处理
编程中有三种类型的错误:语法错误、运行时错误和逻辑错误。
语法错误
语法错误,也称为解析错误,在传统编程语言中发生在编译时,在 JavaScript 中发生在解释时。当 JavaScript 中发生语法错误时,只有与语法错误相同的线程中包含的代码会受到影响,而其他线程中的其余代码会得到执行,假设其中没有任何内容依赖于包含错误的代码。
运行时错误
运行时错误,也称为异常,在执行期间发生(编译/解释之后)。异常还会影响发生异常的线程,从而允许其他 JavaScript 线程继续正常执行。
逻辑错误
逻辑错误可能是最难追踪的错误类型。这些错误不是语法或运行时错误的结果。相反,当您在驱动脚本的逻辑中犯错并且没有获得预期的结果时,就会发生这些错误。
您无法捕获这些错误,因为这取决于您的业务需求以及您想要在程序中放入什么类型的逻辑。
当发生运行时错误时,JavaScript 会抛出 Error 对象的实例。下表列出了 Error 对象的预定义类型。
Sr.No | 错误对象 &描述 |
---|---|
1 |
EvalError 创建一个实例,表示与全局函数 eval() 有关的发生错误。 |
2 |
RangeError 创建一个实例,表示当数字变量或参数超出其有效范围时发生的错误。 |
3 |
ReferenceError 创建一个实例,表示当取消引用无效引用。 |
4 |
SyntaxError 创建一个表示解析代码时发生的语法错误的实例。 |
5 |
TypeError 创建一个表示变量或参数不是有效类型时发生的错误的实例。 |
6 |
URIError 创建一个表示发生的错误的实例当 encodeURI() 或 decodeURI() 传递无效参数时。 |
抛出异常
可以使用 throw 语句 引发错误(预定义或用户定义)。稍后可以捕获这些异常,然后您可以采取适当的措施。以下是相同的语法。
语法:抛出通用异常
throw new Error([message]) OR throw([message])
语法:抛出特定异常
throw new Error_name([message])
异常处理
异常处理通过 try...catch 语句 完成。当程序遇到异常时,程序将以不友好的方式终止。为了防止这种意外错误,我们可以将代码包装在 try...catch 语句中。
try 块后面必须紧跟一个 catch 块或一个 finally 块(或两者之一)。当 try 块中发生异常时,异常将放置在 e 中并执行 catch 块。可选的 finally 块在 try/catch 之后无条件执行
以下是相同的语法。
try { // 要运行的代码 [break;] } catch ( e ) { // 发生异常时运行的代码 [break;] }[ finally { // 无论是否发生异常,始终执行的代码 }]
示例
var a = 100; var b = 0; try { if (b == 0 ) { throw("Divide by zero error."); } else { var c = a / b; } } catch( e ) { console.log("Error: " + e ); }
Output
成功执行上述代码后将显示以下输出。
Error: Divide by zero error
注意 − 注意:您可以在一个函数中引发异常,然后可以使用 try...catch 块在同一函数或调用函数中捕获该异常。
onerror() 方法
onerror 事件处理程序是第一个促进 JavaScript 中错误处理的功能。每当页面上发生异常时,都会在窗口对象上触发错误事件。
示例
<html> <head> <script type = "text/javascript"> window.onerror = function () { document.write ("An error occurred."); } </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type = "button" value = "Click Me" onclick = "myFunc();" /> </form> </body> </html>
Output
成功执行上述代码后将显示以下输出。
![one error method](/es6/images/one_error_method.jpg)
onerror 事件处理程序提供三条信息来识别错误的确切性质 −
错误消息 − 与浏览器针对给定错误显示的消息相同。
URL − 发生错误的文件。
行号 − 给定 URL 中导致错误的行号。
以下示例显示如何提取此信息。
示例
<html> <head> <script type = "text/javascript"> window.onerror = function (msg, url, line) { document.write ("Message : " + msg ); document.write ("url : " + url ); document.write ("Line number : " + line ); } </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type = "button" value = "Click Me" onclick = "myFunc();" /> </form> </body> </html>
自定义错误
JavaScript 支持自定义错误的概念。以下示例对此进行了说明。
示例 1:带有默认消息的自定义错误
function MyError(message) { this.name = 'CustomError'; this.message = message || 'Error raised with default message'; } try { throw new MyError(); } catch (e) { console.log(e.name); console.log(e.message); // 'Default Message' }
成功执行上述代码后将显示以下输出。
CustomError Error raised with default message
示例 2:带有用户定义错误消息的自定义错误
function MyError(message) { this.name = 'CustomError'; this.message = message || 'Default Error Message'; } try { throw new MyError('Printing Custom Error message'); } catch (e) { console.log(e.name); console.log(e.message); }
成功执行上述代码后将显示以下输出。
CustomError Printing Custom Error message