对象传播错误导致没有消息属性

Sne*_*ake 5 javascript custom-errors object-destructuring

我正在尝试传播错误,以便我可以在不影响原始错误的情况下更改错误。

const error = new Error('Error test');

const freeError = {...error};
console.log(error, freeError);
Run Code Online (Sandbox Code Playgroud)

但输出是一个空对象{}。我期待freeError至少有一个 message 属性,但没有

这是 JavaScript 功能的一部分还是我的代码或引擎有问题?

我知道解决这个问题的方法,但它需要额外的工作{...error, message: error.message}。所以,是的,我所需要的只是澄清一下,这样我就可以确定我没有遗漏任何东西。谢谢你。

Cer*_*nce 11

对象传播只复制可枚举的自身属性,至少在某些环境中,message它不是可枚举的自身属性。

在 Chrome 中,它是一个不可枚举的自己的属性,而在 Firefox 中,它是一个属性Error.prototype

const error = new Error('Error test');

// Chrome logs an object (including "enumerable": false,)
console.log(Object.getOwnPropertyDescriptor(error, 'message'));

// Firefox logs an object (including "enumerable": false,)
console.log(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(error), 'message'));
Run Code Online (Sandbox Code Playgroud)

它依赖于实现。我会手动提取您需要的所有属性:

const error = new Error('Error test');
const { message, stack } = error;
const freeError = { message, stack };
console.log(freeError);
Run Code Online (Sandbox Code Playgroud)