Propriedades de erro não são enumeráveis ​​em Javascript

Se você atravessar um objeto regular:

var obj = {foo: 'bar', baz: true};

for (var i in obj) {
console
.log(i, obj[i]);
}

O seguinte será gerado:

foo bar
baz
true

Mas, e se você atravessar uma instância de Error:

var e = new Error('Something went wrong');
for (var i in e) {
console
.log(i, e[i]);
}

Isso não vai imprimir nada. Além disso, Object.keys(e)vai voltar [].

Vamos adicionar algumas propriedades personalizadas.

var e = new Error('Something went wrong');
e
.foo = 'bar';
for (var i in e) {
console
.log(i, e[i]);
}

Em seguida, eles serão exibidos:

foo bar

Confuso? Em seguida, verifique se Erroras propriedades padrão não são enumeráveis .