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
相关产品推荐
相关产品推荐

