Node.js console.log(对象)打印空对象

我很好奇Node.js通过console.log(object)打印对象的方式。

我有一个文件constructor.js下面的代码(从学习Javascriptdevise模式书)

var defineProp = function(obj, key, value){ var config = { value: value, writable: true, configurable: true }; Object.defineProperty(obj, key, config ); } var person = Object.create(Object.prototype); defineProp(person, "car", "Delorean"); defineProp(person, "dateOfBirth", "1981"); defineProp(person, "hasBeard", false); console.log(person); //This prints {} in Node.js 

>node constructor.js运行该代码将打印一个空对象。 但是,Chrome会打印我所期望的,如果我运行HTML文件中的代码。

 console.log(person); //Chrome prints Object {car: "Delorean", dateOfBirth: "1981", hasBeard: false} 

注意:我仍然可以在Node下打印属性(如console.log(person.car) ),而不是对象本身(如console.log(person)

为什么是这样? Chrome和Node是否使用单独的控制台对象原型,即使它们共享相同的JavaScript引擎?

console.log()节点使用util.inspect() ,它使用Object.keys()对象, 它只返回自己的枚举属性 。 此外, 默认情况下 , Object.defineProperty()设置enumerable: false如果您没有明确将其设置为true