Я запускаю следующий код в консоли браузера, а также с node.js v9.11.1 в терминале:
let name = {};
Object.defineProperty(name, 'last', {value: 'Doe'});
console.info(name);
Консоль браузера работает нормально и выводит { last: 'Doe' }. Но в терминале с node.js он не работает и выводит пустой объект {}.
В чем может быть проблема?
Спасибо @Chris G. Хороший указатель!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Одним из свойств дескрипторов свойств является enumerable, который имеет значение по умолчанию false. Если свойство не перечислимо, Node.js решает не отображать это свойство, вот и все.
Вы можете изменить этот бит и попробовать это
let name = {};
Object.defineProperty(name, 'last', {
value: 'Doe',
enumerable: true
});
console.info(name);Я набирал это, когда пришел ответ, хе. да. вы заметите, что если вы ответите, не установив для enumerable значение true, вы можете указать console.info(name.last), и он выведет «Doe», как и ожидалось, в узле.
Замечательный! Все это отличные ответы. Мое желание состояло в том, чтобы использовать объект с Spread operator как {...name} в одной из моих операций. Так что бит enumerable: true меня разобрал. Спасибо @thefourtheye и @James LeClair!
Нашел этот github.com/nodejs/help/issues/798, когда искал в Google заголовок вашего вопроса.