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