You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何打印Error对象的全部属性

问题原因

Error 对象的内置属性(如 name、message、stack 等)默认是不可枚举的,你所用的 for...in 循环只会遍历可枚举的属性,因此会漏掉大量内置属性,部分特殊错误的非枚举专属属性(比如 OpenSSL 错误的 opensslErrorStack)也无法通过该方式遍历到。

可用解决方案

方法1:遍历所有自有属性(包含不可枚举属性)

使用 Object.getOwnPropertyNames() 可以获取对象的所有自有字符串属性,不受可枚举性限制,实现代码如下:

process.on('uncaughtException', function(err) {
  const allProps = Object.getOwnPropertyNames(err);
  for (const prop of allProps) {
    console.log(`${prop}: ${err[prop]}`);
  }
});

方法2:同时兼容Symbol类型属性

如果需要包含以 Symbol 为键的属性,可以合并 Object.getOwnPropertyNames() 和 Object.getOwnPropertySymbols() 的返回结果:

process.on('uncaughtException', function(err) {
  const allKeys = [
    ...Object.getOwnPropertyNames(err),
    ...Object.getOwnPropertySymbols(err)
  ];
  for (const key of allKeys) {
    console.log(`${String(key)}: ${err[key]}`);
  }
});

方法3:Node.js环境快速调试方案

如果是在 Node.js 环境下仅做调试使用,可以直接调用内置的 util.inspect 方法,配置开启不可枚举属性展示即可直接输出完整的错误信息:

const util = require('util');
process.on('uncaughtException', function(err) {
  // showHidden设为true即可展示不可枚举属性,depth设为null会全量展开嵌套内容
  console.log(util.inspect(err, { showHidden: true, depth: null }));
});

该方法会完整输出所有内置属性、自定义专属属性,包括 OpenSSL 错误的 opensslErrorStack 等特殊字段。

内容的提问来源于stack exchange,提问作者Aero Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:54:05