在JavaScript中自定义错误的介绍

55 阅读1分钟

JavaScript给了我们一组8个错误对象,根据错误类型在try/catch表达式中被提出。它们是:

  • Error
  • EvalError
  • RangeError
  • ReferenceError
  • SyntaxError
  • TypeError
  • URIError

我在《JavaScript错误教程》中分析了它们。

这里我想解释一下如何通过扩展基础错误类来创建你自己的自定义错误。

class OutOfFuelError extends Error {}

class FlatTireError extends Error {}

自定义错误允许你根据具体的错误类型采取不同的行为,而不必借助于使用错误信息来了解错误的种类。

try {
  //some code
} catch (err) {
  if (err instanceof OutOfFuelError) {
    //handle error
  } else if (err instanceof FlatTireError) {
    //handle error
  }
}

在你这样做之前,当然必须在你的代码中明确地抛出错误。

try {
  const car = new Car() //imagine we have a Car object

  if (!car.fuel) {
    throw new OutOfFuelError('No fuel!')
  }
  if (car.flatTire) {
    throw new FlatTireError('Flat tire!')
  }
} catch (err) {
  if (err instanceof OutOfFuelError) {
    //handle error
  } else if (err instanceof FlatTireError) {
    //handle error
  }
}

在创建错误的过程中,你也可以定制任何与该类相关的东西,如果需要的话,甚至可以定制构造函数接收的参数。

class OutOfFuelError extends Error {
  constructor(message) {
    super(message)
    this.name = "OutOfFuelError"
  } 
}