ES 6 错误处理
编程中有三种类型的错误:语法错误,运行时错误和逻辑错误。
语法错误
语法错误,也称为解析错误,在编译时在传统编程语言中以及在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块。try / catch之后无条件执行可选的finally块
以下是语法:
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中错误处理的第一个特性。每当页面上发生异常时,错误事件就会在窗口对象上触发。
例子:
<!DOCTYPE html> <html> <meta charset="UTF-8"> <head> <script type = "text/javascript"> window.onerror = function () { document.write ("An error occurred."); } </script> </head> <body> <p>单击以下内容查看结果:</p> <form> <input type = "button" value = "点击我" onclick = "myFunc();" /> </form> </body> </html>
成功执行上述代码后,将显示以下输出:
onerror事件处理程序提供三条信息来识别错误的确切性质 -
● 错误消息 - 浏览器将针对给定错误显示的相同消息。
● URL - 发生错误的文件。
● 行号 - 给定URL中导致错误的行号。
以下示例显示如何提取此信息。
例
<!DOCTYPE html> <html> <meta charset="UTF-8"> <head> <script type="text/javascript"> window.onerror = function(msg, url, line) { document.write("错误消息: " + msg+"<br>"); document.write("url : " + url+"<br>"); document.write("行号: " + line+"<br>"); } </script> </head> <body> <p>单击以下内容查看结果:</p> <form> <input type="button" value="点击我" 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