在Error
中,属性(property)stack
是可选的。然而,当我抛出 new Error('myError')
或者当我在执行脚本期间抛出一般错误时,我总是会得到堆栈。根据浏览器,堆栈不一样但我不是 undefined
.
- 我想知道在什么情况下可能有未定义的堆栈?
最佳答案
JavaScript specification 未定义 stack
属性(然而)。因此,兼容的 JavaScript 实现很可能在 Error
实例上没有 stack
属性。现在大多数都这样做(当然是三大巨头:V8、SpiderMonkey 和 JavaSciptCore),但它还没有标准化,所以他们不必这样做。
In an
Error
, the propertystack
is optional.
我猜您指的是 TypeScript 的错误类型信息:
interface Error {
stack?: string | undefined;
}
由于大多数 JavaScript 引擎都提供 string
类型的 stack
属性,即使规范中没有定义它,因此它是可选的类型字符串| undefined
是一个务实的选择(TypeScript 项目团队是出了名的务实)。因此,他们并没有完全忽略它,而是承认这种常见做法。
I was wondering in which case it was possible to have an
undefined
stack?
我认为在支持它的实现上的Error
实例上不太可能有一个未定义
stack
(更有可能 “”
(如果没有可用的堆栈信息,但我不记得看到过空白堆栈
)。也就是说,TYpeScript 的类型将其定义为 stack?: string | 可能是有原因的。未定义
而不是stack?: string
。
关于javascript - 为什么错误中堆栈属性是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75109188/