JavaScript错误对象未传播(如es6扩展运算符)的原因是什么?

6

我试图传播Javascript的Error对象(标准内置对象)。但是输出为空对象。

let error = new Error('error');
console.log({...error});

输出:

{}

不传播Error对象的原因是什么?

预期输出是什么? - JJWesterkamp
不敢相信我找不到重复项了.. 如果有人有,请告诉我。 - Kaiido
展开语法解析:仅适用于可迭代对象。 - Jai
@Kaiido 你可能还记得 https://meta.stackoverflow.com/q/370046/1048572? - Bergi
@Bergi,我没有特别记得一个问题,只是发现这个问题还没有被问过,觉得很不可思议(实际上我已经看到了一个,但即使那样,我也没有回答,因为我想肯定会有重复的问题,而当时我可能没有时间去搜索)。 - Kaiido
1个回答

11
这是因为对象字面量中的扩展语法“将提供的对象的自有可枚举属性复制到一个新对象中”。您的Error对象的任何自有属性都不是可枚举的。

var error = new Error('error');
var props = Object.getOwnPropertyDescriptors(error);
console.log(props); // none of these are enumerable

所以扩展语法不会复制任何内容。如果它有一个可枚举的值,那么它将复制它:

var error = new Error('error');
error.foo = 'bar';
console.log({...error});


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接