В чем причина нераспространения (оператор распространения es 6) javascript Error object [дубликат]

avatar
mr93
6 ноября 2018 в 06:54
2080
1
5

Я пытаюсь распространить объект Javascript Error (стандартные встроенные объекты). Я получаю пустой объект в качестве вывода.

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

выход:

{}

По какой причине объект Error не распространяется?

Источник
JJWesterkamp
6 ноября 2018 в 06:57
0

Каков ожидаемый результат?

Kaiido
6 ноября 2018 в 07:09
0

Не могу поверить, что я не нахожу обман.. Если у кого-то есть, дайте мне знать.

Bergi
6 ноября 2018 в 07:27
0

@Kaiido Возможно, вы помните meta.coderhelper.com/q/370046/1048572?

Kaiido
6 ноября 2018 в 07:31
0

@Bergi, нет, я не запомнил конкретный вопрос, просто обнаружил, что очень маловероятно, что его еще не задавали (ну, на самом деле я уже видел один, но даже тогда не ответил, думая, что должен быть обманщиком, что у меня, вероятно, не было времени искать тогда).

Ответы (1)

avatar
Kaiido
6 ноября 2018 в 07:15
8

Это связано с тем, что синтаксис расширения в литералах объектов "копирует собственные перечисляемые свойства из предоставленного объекта в новый объект".

Ни одно из собственных свойств вашего объекта 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});