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
。