如何提取JavaScript本机异常的所有信息?

如何提取JavaScript本机异常的所有信息?,javascript,exception,exception-handling,Javascript,Exception,Exception Handling,因为JavaScript是在客户端执行的,所以我无法控制大量的环境变量,在某个时候,我的应用程序可能会抛出异常 我想做的是得到这个异常,让我的应用程序优雅地失败,并向最终用户显示尽可能多的信息(我的最终用户是技术用户)。显然,错误处理可以通过一个简单的try…catch块来完成 让我恼火的是:我如何知道catch块捕获的本机异常中存储了哪些信息? 我假设浏览器的JS引擎抛出的本机异常只是Error类中的对象,就像运行以下代码一样: 试试看{ A. }捕获(ex){ 控制台日志(ex); log

因为JavaScript是在客户端执行的,所以我无法控制大量的环境变量,在某个时候,我的应用程序可能会抛出异常

我想做的是得到这个异常,让我的应用程序优雅地失败,并向最终用户显示尽可能多的信息(我的最终用户是技术用户)。显然,错误处理可以通过一个简单的try…catch块来完成

让我恼火的是:我如何知道
catch
块捕获的本机异常中存储了哪些信息?

我假设浏览器的JS引擎抛出的本机异常只是
Error
类中的对象,就像运行以下代码一样:

试试看{
A.
}捕获(ex){
控制台日志(ex);
log(新引用错误(`Custom`error');
}
我想了解JavaScript的真正本质是什么 例外情况(它们是对象吗?为什么它们在图形中看起来如此不同 控制台?)

Javascript异常是常规Javascript对象。您可以看到对象定义

为什么我不能用for…in块(可能是 答案非常相关)

使用
for(prop in ex){
迭代错误属性不起作用,因为属性未标记为(这也通过打印属性描述符在下面的代码段中显示)

您可以切换到“用于列出所有属性”

下面的代码说明了如何使用它-不确定以这种方式使用
getOwnPropertyNames
&
ex[property]
是否可以,但这是一种可能的解决方案

函数propsToStr(obj){
var-str='';
用于(obj中的道具){
str+=prop+“=”+obj[prop]+”,”;
}
返回str;
}
试一试{
A.
}捕获(ex){
控制台日志(ex);
var propertyNames=Object.getOwnPropertyNames(ex);
propertyNames.forEach(函数(属性){
var descriptor=Object.getOwnPropertyDescriptor(例如,属性);
log(property+“:”+ex[property]+“:”+propsToStr(descriptor));
});
}