свойство JavaScript может быть несчетными, что означает, что они не появляются в for..in
петлях или Object.keys
результатов.
Вы можете использовать Object.getOwnPropertyNames
, чтобы получить все свойства (перечислимые или неперечислимые) непосредственно на объект. Я говорю «прямо», потому что нормальное перечисление просматривает цепочку прототипов объекта, чтобы получить перечислимые свойства на родительских прототипах, а getOwnPropertyNames
- нет.
Таким образом, Object.getOwnPropertyNames(err)
только показывает
['stack',
'arguments',
'type',
'message']
name
свойство не является перечислимы собственностью Error.prototype
и никогда не устанавливается непосредственно на Error
экземпляра. (Прототипирование резюмировать: при попытке получить доступ к err.name
, что поиск err
поворачивает вверх ничего, так что интерпретатор смотрит на Error.prototype
, который действительно имеет name
свойство.)
Try 'Object.getOwnPropertyNames()' вместо 'Object.keys() '. Они могут быть неперечислимыми. –
В качестве примера, 'Object.getOwnPropertyDescriptor (err, 'stack')' показывает 'enumerable: false'. – apsillers