在本教程中,您将学习如何使用 JavaScript try...catch 语句来处理异常。

JavaScript try…catch 语句简介

下面的示例尝试调用不存在的 add() 函数:

let result = add(10, 20);
console.log(result);

console.log('Bye');

并且 JavaScript 引擎抛出未捕获错误:

Uncaught TypeError: add is not a function

错误消息指出 add 不是函数TypeError 是类型错误。

当 JavaScript 引擎遇到错误时,它会抛出错误并立即终止整个脚本的执行。在上面的例子中,代码在第一行停止执行。

有时,您想处理错误并继续执行。因此,您可以使用 try...catch 语句,下面是 try...catch 语句的语法:

try {
  // code may cause error
} catch(error){
  // code to handle error
}

在这个语法中:

  • 首先,将可能导致错误的代码放在 try 块中。
  • 其次,在  catch 块实现逻辑来处理错误。

如果 try 块中发生错误,JavaScript 引擎会立即执行 catch 块中的代码。此外,JavaScript 引擎还为您提供一个错误对象,其中包含错误的详细信息。

基本上,错误对象至少有两个属性:

  • name 错误的名称。
  • message 错误消息。

如果 try 块中没有发生错误,JavaScript 引擎将忽略 catch 块的代码。

请注意,Web 浏览器可能会向 error 对象添加更多属性。例如,Firefox 向 error 对象添加 filenamelineNumberstack 属性。

最好只将可能导致异常的代码放在 try 块中。以下流程图说明 try...catch 语句的工作原理:

JavaScript try…catch 语句示例

下面示例使用 try...catch 语句来处理错误:

try {
  let result = add(10, 20);
  console.log(result);
} catch (e) {
  console.log({ name: e.name, message: e.message });
}
console.log('Bye');

输出

{name: 'TypeError', message: 'add is not a function'}
Bye

在这个例子中,我们调用 add() 函数并将返回值赋给 result 变量。因为 add() 函数不存在,所以 JavaScript 引擎会跳过打印 result 输出到控制台的语句:

console.log(result);

并立即执行 catch 块的语句打印错误名称和消息:

console.log({ name: e.name, message: e.message });

由于我们已经处理错误,JavaScript 引擎继续执行最后一条语句:

console.log('Bye');

忽略 catch 块

下面的示例定义返回两个参数之和的 add() 函数:

const add = (x, y) => x + y;

try {
  let result = add(10, 20);
  console.log(result);
} catch (e) {
  console.log({ name: e.name, message: e.message });
}
console.log('Bye');

输出:

30
Bye

在这个例子中,没有错误发生,因为 add() 函数存在。因此,JavaScript 引擎会跳过 catch 块。

异常标识符

当 try 块中发生异常时,catch 块中的异常变量 e 存储着异常对象。

如果你不想使用异常变量,你可以像这样省略它:

try {
  //...
} catch {
  //...
}

例如,下面使用不带异常变量的 try...catch 语句:

const isValidJSON = (str) => {
  try {
    JSON.parse(str);
    return true;
  } catch {
    return false;
  }
};

let valid = isValidJSON(`{"language":"JavaScript"}`);
console.log(valid);

怎么运行的。

首先,定义判断字符串是否为有效 JSON 的函数 isValidJSON(), 它接受字符串并返回 truefalse,。

为了验证 JSON,isValidJSON() 函数使用了 JSON.parse() 方法和 try...catch 语句。

JSON.parse() 方法解析 JSON 字符串并返回一个对象。如果输入字符串不是有效的 JSON,则 JSON.parse() 抛出异常。

如果没有异常发生,函数  在 try 块中返回 true。否则,它在 catch 块中返回 false

其次,调用 isValidJSON() 函数并将一个 JSON 字符串传递给它:

let valid = isValidJSON(`{"language":"JavaScript"}`);

由于输入字符串是有效的 JSON 格式,isValidJSON() 函数函数返回true.

最后、输出 result 到控制台:

console.log(valid);

结论

使用 try...catch 语句来处理 JavaScript 的异常。仅将可能导致异常的代码放在try 块中。