编程中有三种类型的错误:语法错误,运行时错误和逻辑错误.
语法错误,也是称为解析错误,在传统编程语言的编译时和JavaScript中的解释时发生.当JavaScript中出现语法错误时,只有与语法错误相同的线程中包含的代码才会受到影响,而其他线程中的其余代码将被执行,假设它们中没有任何内容取决于包含错误的代码.
执行期间(编译/解释之后)发生运行时错误,也称为异常.异常也会影响它们出现的线程,允许其他JavaScript线程继续正常执行.
逻辑错误可能是最困难的要追踪的错误类型.这些错误不是语法或运行时错误的结果.相反,当你在驱动脚本的逻辑中犯了错误并且没有按预期得到结果时,就会发生这种情况.
你无法捕获这些错误,因为它取决于你的业务需求,您希望在程序中放置什么类型的逻辑.
当发生运行时错误时,JavaScript会抛出Error对象的实例.下表列出了Error对象的预定义类型.
<td style ="text-align:center; vertical-align:中""6
Sr.No | 错误对象&描述 |
---|---|
1 | EvalError 创建一个实例,表示有关全局函数的错误 eval(). |
2 | RangeError 创建一个表示当a时出错的实例数字变量或参数超出其有效范围. |
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 事件处理程序是第一个促进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中的行号.
以下示例说明如何提取此信息.
<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支持自定义错误的概念.以下示例解释了相同的内容.
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
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