ES6 错误处理
ES6 错误处理
ES6 编程中一般有三种类型的错误:语法错误、运行时错误和逻辑错误。
语法错误
语法错误,也称为解析错误,在传统编程语言编译的时候和在JavaScript中解释的时候发生。当在JavaScript中发生语法错误时,只有与语法错误相同的线程中包含的代码受到影响,如果其他线程中的代码中没有任何内容依赖于于包含错误的代码,那么它不会受到影响,继续执行.
运行时错误
运行时错误,也称为异常,在执行期间(编译/解释后)发生。异常也影响到发生异常的线程,其他JavaScript线程继续正常执行。
逻辑错误
逻辑错误可能是最难跟踪的错误类型。这些错误不是语法或运行时错误的结果。相反,它们是在您在驱动脚本的逻辑中出错时发生的,而不像预期的那样得到结果。
一般很难捕获这些错误,因为它取决于您的业务需求,您希望将什么类型的逻辑放入您的程序中。
当发生运行时错误时,JavaScript抛出错误对象的实例。下表列出了错误对象的预定义类型。
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(catch/finally二选一)。当try块中发生异常时,将执行cacthc的内容,可选的finally块在try/catch后无条件执行
下面是语法:
try { // Code to run [break;] } catch ( e ) { // Code to run if an exception occurs [break;] }[ finally { // Code that is always executed regardless of // an exception occurring }]
例子
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 ); }
输出
上述代码输出如下内容
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>
输出
上述代码输出如下内容
onerror事件处理程序提供了三个信息,以确定错误的确切性质
-错误消息:浏览器将显示给定错误的相同消息。
-URL:发生错误的文件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