我很好奇Node.js通过console.log(对象)打印对象的方式。
我在文件constructor.js下有以下代码(来自Learning Javascript Design Patterns一书)
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
的代码运行会打印一个空对象。然而,如果我在HTML文件中运行代码,Chrome会打印出我所期望的内容。
console.log(person); //Chrome prints Object {car: "Delorean", dateOfBirth: "1981", hasBeard: false}
注意:我仍然可以在Node下打印属性(例如console.log(person.car)
),而不是对象本身(例如console.log(person)
)
这是为什么? Chrome和Node是否为控制台对象使用单独的原型,即使它们共享相同的JavaScript引擎?
答案 0 :(得分:4)
console.log()
使用util.inspect()
,uses Object.keys()
对象returns only own enumerable properties。此外,by default,Object.defineProperty()
设置enumerable: false
如果您未明确将其设置为true
。