ES6 错误处理
编程中存在三种类型的错误:语法错误、运行时错误和逻辑错误。
语法错误
语法错误,也称为解析错误,发生在传统编程语言的编译时和 JavaScript 的解释时。 当 JavaScript 中发生语法错误时,只有包含在与语法错误相同的线程中的代码会受到影响,其他线程中的其余代码将被执行,假设它们中没有任何内容取决于包含错误的代码。
运行时错误
运行时错误,也称为异常,发生在执行期间(编译/解释之后)。 异常也会影响它们发生的线程,允许其他 JavaScript 线程继续正常执行。
逻辑错误
逻辑错误可能是最难追踪的错误类型。 这些错误不是语法或运行时错误的结果。 相反,当您在驱动脚本的逻辑中犯了错误并且没有得到预期的结果时,它们就会发生。
我们无法捕获这些错误,因为这取决于业务需求,我们希望在程序中放入哪种类型的逻辑。
当发生运行时错误时,JavaScript 会抛出 Error 对象的实例。 下表列出了错误对象的预定义类型。
序号 | Error 对象 | 描述 |
---|---|---|
1 | EvalError | 创建一个实例,表示发生在全局函数 eval() 方面的错误。 |
2 | RangeError | 创建一个实例,表示当数字变量或参数超出其有效范围时发生的错误。 |
3 | ReferenceError | 创建一个实例,表示取消引用无效引用时发生的错误。 |
4 | SyntaxError | 创建一个实例,表示解析代码时发生的语法错误。 |
5 | TypeError | 创建一个实例,表示当变量或参数不是有效类型时发生的错误。 |
6 | URIError | 创建一个实例,表示在向 encodeURI() 或 decodeURI() 传递无效参数时发生的错误。 |
抛出异常
可以使用 throw
语句引发错误(预定义或用户定义)。 稍后可以捕获这些异常,您可以采取适当的措施。 以下是相同的语法。
语法:抛出一般异常
throw new Error([message])
// 或者
throw([message])
语法:抛出特定异常
throw new Error_name([message])
异常处理
异常处理是通过 try...catch
语句完成的。 当程序遇到异常时,程序将以不友好的方式终止。 为了防止出现这种意外错误,我们可以将代码包装在 try...catch 语句中。
try
块必须紧跟一个 catch
块或一个 finally
块(或两者之一)。 当 try
块中发生异常时,将异常放在 e 中并执行 catch
块。 可选的 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 中错误处理的功能。 每当页面上发生异常时,都会在 window 对象上触发 error 事件。
<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 支持自定义错误的概念。 以下示例解释相同。
示例 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