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

JavaScript中是否支持抛出匿名对象?

如何在JavaScript中抛出带自定义信息的匿名对象

当然可以抛出匿名对象,你之前的写法问题出在Error构造函数的参数处理上——Error只接受字符串作为消息参数,传入对象会被自动转为字符串[object Object],所以看不到自定义属性。

下面是两种可行的方案:

方案1:直接抛出匿名对象

不需要借助Error构造函数,直接抛出你定义的匿名对象即可,这样能完整保留所有自定义属性:

throw { 
  message: '操作失败',
  firstKey: firstValue, 
  secondKey: secondValue 
};

在catch块中可以直接访问这些属性:

try {
  // 执行可能出错的代码
  throw { message: '操作失败', firstKey: 'foo', secondKey: 'bar' };
} catch (err) {
  console.log(err.message); // 输出:操作失败
  console.log(err.firstKey); // 输出:foo
  console.log(err.secondKey); // 输出:bar
}

方案2:给Error实例附加自定义属性

如果需要保留Error实例自带的stack栈信息(方便调试),可以先创建Error实例,再给它添加自定义属性,或者用Object.assign简化写法:

// 方式1:手动添加属性
const err = new Error('操作失败');
err.firstKey = firstValue;
err.secondKey = secondValue;
throw err;

// 方式2:用Object.assign一次性赋值
throw Object.assign(new Error('操作失败'), { 
  firstKey: firstValue, 
  secondKey: secondValue 
});

这种方式下,catch块既能拿到自定义属性,也能访问Error的原生属性:

try {
  throw Object.assign(new Error('操作失败'), { firstKey: 'foo', secondKey: 'bar' });
} catch (err) {
  console.log(err.message); // 输出:操作失败
  console.log(err.firstKey); // 输出:foo
  console.log(err.stack); // 输出错误栈信息,方便定位问题
}

内容的提问来源于stack exchange,提问作者Big boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:06:31