JavaScript 中的错误处理
运行 JavaScript 代码时,可能会发生许多错误。错误的输入、未定义的变量、函数以及不正确的语法都可能导致错误。如果我们不处理这些错误,它们会阻止代码的进一步执行,从而导致糟糕的用户体验和用户不满。在本文中,我们将简要介绍如何处理发生的错误,以便更轻松地进行调试并为用户提供有意义的信息。
try
,catch
和finally
大多数错误发生在处理用户输入或其他来源的数据时,例如读取并发送数据到服务器,或运行异步代码。如果在执行过程中发生错误,JavaScript 将停止并创建一个错误对象。该对象称为throw an exception
。Try
-catch 语句允许检查代码块中定义的代码是否存在错误try
,如果检测到错误,它将跳过后续语句并跳转到该catch
代码块来处理错误。
try {
// x is not defined in the scope and will throw an exception
console.log(x)
// this statement will be skipped
console.log('Last block call');
} catch(error) {
console.error(error);
}
在上面的例子中,我们尝试执行两个语句,其中第一个语句应该记录未定义变量x
。默认情况下,JavaScript 会抛出异常并跳转到catch
代码块。catch
将保存该异常的值。为了便于调试,请使用console.error
而不是console.log
,因为它会生成错误消息并将其添加到页面生成的错误列表中。
使用 try-catch 时,如果发生错误,只有try
代码块语句会停止执行。try-catch 之外的代码不会冻结并继续运行。
虽然 try-catch 总是会一起出现,但还有一个额外的finally
代码块,无论是否抛出异常,它都会执行代码。你通常会用它来关闭连接或流,以便在发生错误时优雅地释放代码块中的代码。
try {
// ...
} catch(error) {
// ...
} finally {
closeConnection();
}
throw
陈述
throw
语句允许您创建自定义错误消息。语句执行时,必须指定一个值,该值可以是任意类型:
throw 7; // Number type
throw 'Invalid string'; // String type
throw false; // Boolean type
throw { name: 'SyntaxError'; message: 'Unknown character' }; // Object type
throw new Error('Typo'); // Error object constructor
throw
在 try-catch 语句中使用时,throw
可以在代码块中访问触发的异常值catch
。
如果throw
语句未得到处理(例如,在 try-catch 中),则会停止 JavaScript 执行。
Error
目的
该Error
对象内置于 JavaScript 错误构造函数中,会在错误发生时自动调用,也可以手动生成并抛出。它包含三个属性:name
、message
和stack
。
使用内置Error
对象可以更轻松地进行调试,因为它会追溯到抛出错误之前的调用堆栈,以便您可以查看导致问题的代码行。
大多数自动生成的、已抛出的命名错误包括:
SyntaxError
- 语法错误,例如代码中的逗号放错了位置TypeError
- 类型连接错误,即运行类型不存在的方法'str'.toFix()
ReferenceError
- 引用未声明的函数或变量时
要使用构造函数,我们用new
变量调用它并指定一条消息作为参数:
try {
throw new Error('Invalid input');
} catch(error) {
console.error('Name:', error.name); // Name: Error
console.error('Message:', error.message); // Message: Invalid input
}
结论
这就是 JavaScript 中错误处理的基础知识。错误终究会发生,知道如何优雅地处理错误可以让调试更加轻松,并带来更好的用户体验。
鏂囩珷鏉ユ簮锛�https://dev.to/spukas/error-handling-in-javascript-56c8