可选的 Catch Binding


# 可选的 Catch Binding

# 可以省略 catch 子句的错误变量

在 ES10 之前我们都是这样捕获异常的(即使不使用错误变量,也必须始终声明它):

try {
  // tryCode
} catch (err) {
  // catchCode
}
1
2
3
4
5

在这里 err 是必须的参数,在 ES10 可以省略这个参数:

try {
  console.log('Foobar')
} catch {
  console.error('Bar')
}
1
2
3
4
5

通常,我们不希望忽略应用程序中的错误。至少希望将它们打印到控制台。然而,在一些罕见的情况下,可能根本不需要 catch 变量绑定,比如下面两个案例。

# 案例 1:验证参数是否为 json 格式

这个需求我们只需要返回 truefalse,并不关心 catch 的参数。

const validJSON = json => {
  try {
    JSON.parse(json)
    return true
  } catch {
    return false
  }
}

const json = '{"name":"zhangsan", "age": 13}'
console.log(validJSON(json))
1
2
3
4
5
6
7
8
9
10
11

# 案例 2:日志代码中的防错逻辑

假设我们试图将一个错误记录到控制台,然后由于某种原因,日志代码本身会导致另一个错误。我们不希望日志代码抛出错误,所以在这种情况下,没有绑定的 catch 子句可能是有意义的。

function log(error) {
  try {
    console.log(error)
  } catch {
    // There's not much more we can do.
  }
}
1
2
3
4
5
6
7

(完)