JavaScript中的内部错误(异常)

JavaScript中的内部错误(异常),javascript,error-handling,Javascript,Error Handling,在JavaScript中抛出异常时,是否有一种包含内部异常的首选方法 我对来自C#背景的JavaScript比较陌生。在C#中,您可以执行以下操作: try { // Do stuff } catch (Exception ex) { throw new Exception("This is a more detailed message.", ex); } 在我在JavaScript中看到的示例中,我无法找到如何捕获异常、添加新消息以及在仍然传递原始异常的情况下

在JavaScript中抛出异常时,是否有一种包含内部异常的首选方法

我对来自C#背景的JavaScript比较陌生。在C#中,您可以执行以下操作:

try 
{
  // Do stuff
}
catch (Exception ex)
{
  throw new Exception("This is a more detailed message.", ex);
}

在我在JavaScript中看到的示例中,我无法找到如何捕获异常、添加新消息以及在仍然传递原始异常的情况下重新抛出新异常。

您可以抛出任何想要的对象:

try {
    var x = 1/0; 
}
catch (e) {
    throw new MyException("There is no joy in Mudville", e);
}

function MyException(text, internal_exception) {
    this.text = text;
    this.internal_exception = internal_exception;
}

然后将抛出类型为
MyException
的错误,属性为
text
internal\u exception

您可以在javascript中定义自己的异常:。然后,这个概念在某种程度上是一个全球标准:异常应该适合于使用您的api的用户。因此,这意味着在必要时捕获它,添加以下信息,记录原始异常等。请参阅Joshua Bloch,《有效Java第二版》,第61项:抛出适合抽象的异常。我认为可能有一种方法可以让API的消费者更容易地使用它。我可能只是将名为innerException的字段添加到自定义异常中。谢谢throw显示一个堆栈,因此您应该能够准确地跟踪问题所在的位置。这就是说,堆栈不是一个标准属性,尽管它以一些稍微不同的格式被广泛实现。我这样做是因为除了“text”和“internalError”之外,我还有一个动态属性“data”,一个记录各种信息的对象,有时与生成错误的输入相关。我这样做是为了更简单更详细的调试。